/*
 * (c) Copyright Ascensio System SIA 2010-2024
 *
 * This program is a free software product. You can redistribute it and/or
 * modify it under the terms of the GNU Affero General Public License (AGPL)
 * version 3 as published by the Free Software Foundation. In accordance with
 * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
 * that Ascensio System SIA expressly excludes the warranty of non-infringement
 * of any third-party rights.
 *
 * This program is distributed WITHOUT ANY WARRANTY; without even the implied
 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR  PURPOSE. For
 * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
 *
 * You can contact Ascensio System SIA at 20A-6 Ernesta Birznieka-Upish
 * street, Riga, Latvia, EU, LV-1050.
 *
 * The  interactive user interfaces in modified source and object code versions
 * of the Program must display Appropriate Legal Notices, as required under
 * Section 5 of the GNU AGPL version 3.
 *
 * Pursuant to Section 7(b) of the License you must retain the original Product
 * logo when distributing the program. Pursuant to Section 7(e) we decline to
 * grant you any rights under trademark law for use of our trademarks.
 *
 * All the Product's GUI elements, including illustrations and icon sets, as
 * well as technical writing content are licensed under the terms of the
 * Creative Commons Attribution-ShareAlike 4.0 International. See the License
 * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
 *
 */
QUnit.config.autostart = false;
$(function () {

	Asc.spreadsheet_api.prototype._init = function () {
		this._loadModules();
	};
	Asc.spreadsheet_api.prototype._loadFonts = function (fonts, callback) {
		callback();
	};
	Asc.spreadsheet_api.prototype.onEndLoadFile = function (fonts, callback) {
		openDocument();
	};
	AscCommonExcel.WorkbookView.prototype._calcMaxDigitWidth = function () {
	};
	AscCommonExcel.WorkbookView.prototype._canResize = function () {
	};

	AscCommonExcel.WorkbookView.prototype._onWSSelectionChanged = function () {
	};
	AscCommonExcel.WorkbookView.prototype.showWorksheet = function () {
	};
	AscCommonExcel.WorksheetView.prototype._init = function () {
	};
	AscCommonExcel.WorksheetView.prototype.updateRanges = function () {
	};
	AscCommonExcel.WorksheetView.prototype._autoFitColumnsWidth = function () {
	};
	AscCommonExcel.WorksheetView.prototype.setSelection = function () {
	};
	AscCommonExcel.WorksheetView.prototype.draw = function () {
	};
	AscCommonExcel.WorksheetView.prototype._prepareDrawingObjects = function () {
	};
	AscCommonExcel.WorksheetView.prototype.getZoom = function () {
	};
	AscCommonExcel.WorksheetView.prototype._getPPIY = function () {
	};
	AscCommonExcel.WorksheetView.prototype._getPPIX = function () {
	};

	AscCommonExcel.asc_CEventsController.prototype.init = function () {
	};

	AscCommon.InitBrowserInputContext = function () {

	};

	AscCommon.baseEditorsApi.prototype._onEndLoadSdk = function () {
		this.ImageLoader = AscCommon.g_image_loader;
	};

	var api = new Asc.spreadsheet_api({
		'id-view': 'editor_sdk'
	});
	api.FontLoader = {
		LoadDocumentFonts: function () {
			setTimeout(startTests, 0)
		}
	};

	window["Asc"]["editor"] = api;
	var wb, ws, wsData, wsView;

	function openDocument() {
		AscCommon.g_oTableId.init();
		api._onEndLoadSdk();
		AscFormat.initStyleManager();
		api.isOpenOOXInBrowser = false;
		api.OpenDocumentFromBin(null, AscCommon.getEmpty());
		api.initCollaborativeEditing({});
		api.wb = new AscCommonExcel.WorkbookView(api.wbModel, api.controller, api.handlers, api.HtmlElement,
			api.topLineEditorElement, api, api.collaborativeEditing, api.fontRenderingMode);
		api.wb._init();
		wb = api.wbModel;
		wb.handlers.add("getSelectionState", function () {
			return null;
		});
		ws = api.wbModel.aWorksheets[0];
		api.asc_insertWorksheet(["Data"]);
		wsData = wb.getWorksheetByName(["Data"], 0);

		wsView = api.wb.getWorksheet(0);
		wsView.handlers = api.handlers;
		wsView.objectRender = new AscFormat.DrawingObjects();
		wsView.objectRender.init(wsView);
		//wsView.objectRender.controller = new AscFormat.DrawingObjectsController(wsView.objectRender);
	}

	function fillData(ws, data, range) {
		range = ws.getRange4(range.r1, range.c1);
		range.fillData(data);
	}

	var gTypes = ["bar", "barStacked", "barStackedPercent", "barStacked3D", "barStackedPercent3D", "barStackedPercent3DPerspective", "horizontalBar", "horizontalBarStacked",
		"horizontalBarStackedPercent", "horizontalBar3D", "horizontalBarStacked3D", "horizontalBarStackedPercent3D", "lineNormal", "lineStacked", "lineStackedPercent",
		"line3D", "pie", "pie3D", "doughnut", "scatter", "stock", "area", "areaStacked", "areaStackedPercent"];

	var gMapPaths = {
		"bar": "15,0,3.1750000000000003,66.29583333333333,1,96.29583333333335,66.29583333333333,1,96.29583333333335,3.1749999999999985,1,3.1750000000000003,3.1749999999999985,1,3.1750000000000003,66.29583333333333,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,42,0,3.439583333333333,66.56041666666668,1,96.5604166666667,66.56041666666668,0,3.439583333333333,56.04027777777778,1,96.5604166666667,56.04027777777778,0,3.439583333333333,45.520138888888894,1,96.5604166666667,45.520138888888894,0,3.439583333333333,35,1,96.5604166666667,35,0,3.439583333333333,24.479861111111116,1,96.5604166666667,24.479861111111116,0,3.439583333333333,13.959722222222226,1,96.5604166666667,13.959722222222226,0,3.439583333333333,3.439583333333332,1,96.5604166666667,3.439583333333332,180,0,3.439583333333333,56.04027777777778,1,96.5604166666667,56.04027777777778,0,3.439583333333333,58.14430555555557,1,96.5604166666667,58.14430555555557,0,3.439583333333333,60.24833333333335,1,96.5604166666667,60.24833333333335,0,3.439583333333333,62.352361111111115,1,96.5604166666667,62.352361111111115,0,3.439583333333333,64.4563888888889,1,96.5604166666667,64.4563888888889,0,3.439583333333333,45.520138888888894,1,96.5604166666667,45.520138888888894,0,3.439583333333333,47.624166666666675,1,96.5604166666667,47.624166666666675,0,3.439583333333333,49.72819444444446,1,96.5604166666667,49.72819444444446,0,3.439583333333333,51.83222222222223,1,96.5604166666667,51.83222222222223,0,3.439583333333333,53.93625,1,96.5604166666667,53.93625,0,3.439583333333333,35,1,96.5604166666667,35,0,3.439583333333333,37.10402777777778,1,96.5604166666667,37.10402777777778,0,3.439583333333333,39.20805555555556,1,96.5604166666667,39.20805555555556,0,3.439583333333333,41.312083333333334,1,96.5604166666667,41.312083333333334,0,3.439583333333333,43.41611111111111,1,96.5604166666667,43.41611111111111,0,3.439583333333333,24.479861111111116,1,96.5604166666667,24.479861111111116,0,3.439583333333333,26.583888888888893,1,96.5604166666667,26.583888888888893,0,3.439583333333333,28.68791666666667,1,96.5604166666667,28.68791666666667,0,3.439583333333333,30.79194444444445,1,96.5604166666667,30.79194444444445,0,3.439583333333333,32.89597222222223,1,96.5604166666667,32.89597222222223,0,3.439583333333333,13.959722222222226,1,96.5604166666667,13.959722222222226,0,3.439583333333333,16.063750000000002,1,96.5604166666667,16.063750000000002,0,3.439583333333333,18.16777777777778,1,96.5604166666667,18.16777777777778,0,3.439583333333333,20.271805555555563,1,96.5604166666667,20.271805555555563,0,3.439583333333333,22.375833333333336,1,96.5604166666667,22.375833333333336,0,3.439583333333333,3.439583333333332,1,96.5604166666667,3.439583333333332,0,3.439583333333333,5.543611111111109,1,96.5604166666667,5.543611111111109,0,3.439583333333333,7.647638888888886,1,96.5604166666667,7.647638888888886,0,3.439583333333333,9.751666666666665,1,96.5604166666667,9.751666666666665,0,3.439583333333333,11.855694444444444,1,96.5604166666667,11.855694444444444,15,0,10.091071428571432,66.56041666666668,1,10.091071428571432,24.479861111111116,1,18.95972222222223,24.479861111111116,1,18.95972222222223,66.56041666666668,1,10.091071428571432,66.56041666666668,15,0,41.131349206349206,66.56041666666668,1,41.131349206349206,16.06375,1,50,16.06375,1,50,66.56041666666668,1,41.131349206349206,66.56041666666668,15,0,72.171626984127,66.56041666666668,1,72.171626984127,7.647638888888893,1,81.0402777777778,7.647638888888893,1,81.0402777777778,66.56041666666668,1,72.171626984127,66.56041666666668,15,0,18.95972222222223,66.56041666666668,1,18.95972222222223,13.959722222222226,1,27.82837301587303,13.959722222222226,1,27.82837301587303,66.56041666666668,1,18.95972222222223,66.56041666666668,15,0,50,66.56041666666668,1,50,11.85569444444444,1,58.86865079365081,11.85569444444444,1,58.86865079365081,66.56041666666668,1,50,66.56041666666668,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
		"barStacked": "15,0,3.1750000000000003,66.29583333333333,1,96.29583333333335,66.29583333333333,1,96.29583333333335,3.1749999999999985,1,3.1750000000000003,3.1749999999999985,1,3.1750000000000003,66.29583333333333,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,42,0,3.439583333333333,66.56041666666668,1,96.5604166666667,66.56041666666668,0,3.439583333333333,56.04027777777778,1,96.5604166666667,56.04027777777778,0,3.439583333333333,45.520138888888894,1,96.5604166666667,45.520138888888894,0,3.439583333333333,35,1,96.5604166666667,35,0,3.439583333333333,24.479861111111116,1,96.5604166666667,24.479861111111116,0,3.439583333333333,13.959722222222226,1,96.5604166666667,13.959722222222226,0,3.439583333333333,3.439583333333332,1,96.5604166666667,3.439583333333332,180,0,3.439583333333333,56.04027777777778,1,96.5604166666667,56.04027777777778,0,3.439583333333333,58.14430555555557,1,96.5604166666667,58.14430555555557,0,3.439583333333333,60.24833333333335,1,96.5604166666667,60.24833333333335,0,3.439583333333333,62.352361111111115,1,96.5604166666667,62.352361111111115,0,3.439583333333333,64.4563888888889,1,96.5604166666667,64.4563888888889,0,3.439583333333333,45.520138888888894,1,96.5604166666667,45.520138888888894,0,3.439583333333333,47.624166666666675,1,96.5604166666667,47.624166666666675,0,3.439583333333333,49.72819444444446,1,96.5604166666667,49.72819444444446,0,3.439583333333333,51.83222222222223,1,96.5604166666667,51.83222222222223,0,3.439583333333333,53.93625,1,96.5604166666667,53.93625,0,3.439583333333333,35,1,96.5604166666667,35,0,3.439583333333333,37.10402777777778,1,96.5604166666667,37.10402777777778,0,3.439583333333333,39.20805555555556,1,96.5604166666667,39.20805555555556,0,3.439583333333333,41.312083333333334,1,96.5604166666667,41.312083333333334,0,3.439583333333333,43.41611111111111,1,96.5604166666667,43.41611111111111,0,3.439583333333333,24.479861111111116,1,96.5604166666667,24.479861111111116,0,3.439583333333333,26.583888888888893,1,96.5604166666667,26.583888888888893,0,3.439583333333333,28.68791666666667,1,96.5604166666667,28.68791666666667,0,3.439583333333333,30.79194444444445,1,96.5604166666667,30.79194444444445,0,3.439583333333333,32.89597222222223,1,96.5604166666667,32.89597222222223,0,3.439583333333333,13.959722222222226,1,96.5604166666667,13.959722222222226,0,3.439583333333333,16.063750000000002,1,96.5604166666667,16.063750000000002,0,3.439583333333333,18.16777777777778,1,96.5604166666667,18.16777777777778,0,3.439583333333333,20.271805555555563,1,96.5604166666667,20.271805555555563,0,3.439583333333333,22.375833333333336,1,96.5604166666667,22.375833333333336,0,3.439583333333333,3.439583333333332,1,96.5604166666667,3.439583333333332,0,3.439583333333333,5.543611111111109,1,96.5604166666667,5.543611111111109,0,3.439583333333333,7.647638888888886,1,96.5604166666667,7.647638888888886,0,3.439583333333333,9.751666666666665,1,96.5604166666667,9.751666666666665,0,3.439583333333333,11.855694444444444,1,96.5604166666667,11.855694444444444,15,0,12.751666666666669,66.56041666666668,1,12.751666666666669,45.520138888888894,1,25.167777777777783,45.520138888888894,1,25.167777777777783,66.56041666666668,1,12.751666666666669,66.56041666666668,15,0,43.79194444444445,66.56041666666668,1,43.79194444444445,41.31208333333334,1,56.20805555555556,41.31208333333334,1,56.20805555555556,66.56041666666668,1,43.79194444444445,66.56041666666668,15,0,74.83222222222224,66.56041666666668,1,74.83222222222224,37.10402777777777,1,87.24833333333336,37.10402777777777,1,87.24833333333336,66.56041666666668,1,74.83222222222224,66.56041666666668,15,0,12.751666666666669,45.520138888888894,1,12.751666666666669,19.21979166666667,1,25.167777777777783,19.21979166666667,1,25.167777777777783,45.520138888888894,1,12.751666666666669,45.520138888888894,15,0,43.79194444444445,41.31208333333334,1,43.79194444444445,13.959722222222222,1,56.20805555555556,13.959722222222222,1,56.20805555555556,41.31208333333334,1,43.79194444444445,41.31208333333334,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
		"barStackedPercent": "15,0,3.1750000000000003,66.29583333333333,1,96.29583333333335,66.29583333333333,1,96.29583333333335,3.1749999999999985,1,3.1750000000000003,3.1749999999999985,1,3.1750000000000003,66.29583333333333,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,66,0,3.439583333333333,66.56041666666668,1,96.5604166666667,66.56041666666668,0,3.439583333333333,60.24833333333334,1,96.5604166666667,60.24833333333334,0,3.439583333333333,53.93625,1,96.5604166666667,53.93625,0,3.439583333333333,47.62416666666667,1,96.5604166666667,47.62416666666667,0,3.439583333333333,41.31208333333334,1,96.5604166666667,41.31208333333334,0,3.439583333333333,35,1,96.5604166666667,35,0,3.439583333333333,28.68791666666667,1,96.5604166666667,28.68791666666667,0,3.439583333333333,22.375833333333333,1,96.5604166666667,22.375833333333333,0,3.439583333333333,16.06375,1,96.5604166666667,16.06375,0,3.439583333333333,9.751666666666667,1,96.5604166666667,9.751666666666667,0,3.439583333333333,3.439583333333332,1,96.5604166666667,3.439583333333332,300,0,3.439583333333333,60.24833333333334,1,96.5604166666667,60.24833333333334,0,3.439583333333333,61.51075,1,96.5604166666667,61.51075,0,3.439583333333333,62.77316666666667,1,96.5604166666667,62.77316666666667,0,3.439583333333333,64.03558333333334,1,96.5604166666667,64.03558333333334,0,3.439583333333333,65.298,1,96.5604166666667,65.298,0,3.439583333333333,53.93625,1,96.5604166666667,53.93625,0,3.439583333333333,55.198666666666675,1,96.5604166666667,55.198666666666675,0,3.439583333333333,56.46108333333334,1,96.5604166666667,56.46108333333334,0,3.439583333333333,57.7235,1,96.5604166666667,57.7235,0,3.439583333333333,58.985916666666675,1,96.5604166666667,58.985916666666675,0,3.439583333333333,47.62416666666667,1,96.5604166666667,47.62416666666667,0,3.439583333333333,48.88658333333334,1,96.5604166666667,48.88658333333334,0,3.439583333333333,50.148999999999994,1,96.5604166666667,50.148999999999994,0,3.439583333333333,51.41141666666667,1,96.5604166666667,51.41141666666667,0,3.439583333333333,52.67383333333334,1,96.5604166666667,52.67383333333334,0,3.439583333333333,41.31208333333334,1,96.5604166666667,41.31208333333334,0,3.439583333333333,42.57450000000001,1,96.5604166666667,42.57450000000001,0,3.439583333333333,43.83691666666667,1,96.5604166666667,43.83691666666667,0,3.439583333333333,45.09933333333334,1,96.5604166666667,45.09933333333334,0,3.439583333333333,46.36175000000001,1,96.5604166666667,46.36175000000001,0,3.439583333333333,35,1,96.5604166666667,35,0,3.439583333333333,36.26241666666667,1,96.5604166666667,36.26241666666667,0,3.439583333333333,37.52483333333333,1,96.5604166666667,37.52483333333333,0,3.439583333333333,38.78725,1,96.5604166666667,38.78725,0,3.439583333333333,40.04966666666667,1,96.5604166666667,40.04966666666667,0,3.439583333333333,28.68791666666667,1,96.5604166666667,28.68791666666667,0,3.439583333333333,29.95033333333333,1,96.5604166666667,29.95033333333333,0,3.439583333333333,31.212750000000003,1,96.5604166666667,31.212750000000003,0,3.439583333333333,32.47516666666667,1,96.5604166666667,32.47516666666667,0,3.439583333333333,33.737583333333326,1,96.5604166666667,33.737583333333326,0,3.439583333333333,22.375833333333333,1,96.5604166666667,22.375833333333333,0,3.439583333333333,23.63825,1,96.5604166666667,23.63825,0,3.439583333333333,24.90066666666667,1,96.5604166666667,24.90066666666667,0,3.439583333333333,26.16308333333333,1,96.5604166666667,26.16308333333333,0,3.439583333333333,27.425500000000003,1,96.5604166666667,27.425500000000003,0,3.439583333333333,16.06375,1,96.5604166666667,16.06375,0,3.439583333333333,17.326166666666666,1,96.5604166666667,17.326166666666666,0,3.439583333333333,18.588583333333332,1,96.5604166666667,18.588583333333332,0,3.439583333333333,19.851000000000003,1,96.5604166666667,19.851000000000003,0,3.439583333333333,21.113416666666666,1,96.5604166666667,21.113416666666666,0,3.439583333333333,9.751666666666667,1,96.5604166666667,9.751666666666667,0,3.439583333333333,11.014083333333332,1,96.5604166666667,11.014083333333332,0,3.439583333333333,12.276499999999997,1,96.5604166666667,12.276499999999997,0,3.439583333333333,13.538916666666667,1,96.5604166666667,13.538916666666667,0,3.439583333333333,14.801333333333332,1,96.5604166666667,14.801333333333332,0,3.439583333333333,3.439583333333332,1,96.5604166666667,3.439583333333332,0,3.439583333333333,4.701999999999999,1,96.5604166666667,4.701999999999999,0,3.439583333333333,5.964416666666666,1,96.5604166666667,5.964416666666666,0,3.439583333333333,7.226833333333332,1,96.5604166666667,7.226833333333332,0,3.439583333333333,8.489249999999998,1,96.5604166666667,8.489249999999998,15,0,12.751666666666669,66.56041666666668,1,12.751666666666669,38.506712962962965,1,25.167777777777783,38.506712962962965,1,25.167777777777783,66.56041666666668,1,12.751666666666669,66.56041666666668,15,0,43.79194444444445,66.56041666666668,1,43.79194444444445,36.26241666666667,1,56.20805555555556,36.26241666666667,1,56.20805555555556,66.56041666666668,1,43.79194444444445,66.56041666666668,15,0,74.83222222222224,66.56041666666668,1,74.83222222222224,3.439583333333332,1,87.24833333333336,3.439583333333332,1,87.24833333333336,66.56041666666668,1,74.83222222222224,66.56041666666668,15,0,12.751666666666669,38.50671296296297,1,12.751666666666669,3.439583333333339,1,25.167777777777783,3.439583333333339,1,25.167777777777783,38.50671296296297,1,12.751666666666669,38.50671296296297,15,0,43.79194444444445,36.26241666666667,1,43.79194444444445,3.439583333333332,1,56.20805555555556,3.439583333333332,1,56.20805555555556,36.26241666666667,1,43.79194444444445,36.26241666666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
		"barStackedPercent3D": "15,0,13.828511365401235,58.533493220018336,1,94.95101892367906,58.533493220018336,1,94.95101892367906,3.9988432008701813,1,13.828511365401235,3.9988432008701813,0,13.828511365401235,58.533493220018336,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,99,0,4.8144909438577885,65.76666666666667,1,14.0630014978644,58.7679833524815,1,95.18550905614221,58.7679833524815,0,4.8144909438577885,60.31320166475185,1,14.0630014978644,53.31451835056669,1,95.18550905614221,53.31451835056669,0,4.8144909438577885,54.85973666283704,1,14.0630014978644,47.86105334865187,1,95.18550905614221,47.86105334865187,0,4.8144909438577885,49.406271660922215,1,14.0630014978644,42.40758834673706,1,95.18550905614221,42.40758834673706,0,4.8144909438577885,43.95280665900739,1,14.0630014978644,36.954123344822236,1,95.18550905614221,36.954123344822236,0,4.8144909438577885,38.49934165709258,1,14.0630014978644,31.500658342907425,1,95.18550905614221,31.500658342907425,0,4.8144909438577885,33.045876655177764,1,14.0630014978644,26.047193340992607,1,95.18550905614221,26.047193340992607,0,4.8144909438577885,27.59241165326295,1,14.0630014978644,20.59372833907779,1,95.18550905614221,20.59372833907779,0,4.8144909438577885,22.138946651348128,1,14.0630014978644,15.140263337162965,1,95.18550905614221,15.140263337162965,0,4.8144909438577885,16.68548164943331,1,14.0630014978644,9.68679833524815,1,95.18550905614221,9.68679833524815,0,4.8144909438577885,11.232016647518504,1,14.0630014978644,4.233333333333337,1,95.18550905614221,4.233333333333337,459,0,4.8144909438577885,65.76666666666667,1,14.0630014978644,58.7679833524815,1,95.18550905614221,58.7679833524815,0,4.8144909438577885,60.31320166475185,1,14.0630014978644,53.31451835056669,1,95.18550905614221,53.31451835056669,0,4.8144909438577885,61.403894665134814,1,14.0630014978644,54.40521135094965,1,95.18550905614221,54.40521135094965,0,4.8144909438577885,62.49458766551778,1,14.0630014978644,55.49590435133262,1,95.18550905614221,55.49590435133262,0,4.8144909438577885,63.58528066590074,1,14.0630014978644,56.586597351715575,1,95.18550905614221,56.586597351715575,0,4.8144909438577885,64.67597366628371,1,14.0630014978644,57.677290352098545,1,95.18550905614221,57.677290352098545,0,4.8144909438577885,54.85973666283704,1,14.0630014978644,47.86105334865187,1,95.18550905614221,47.86105334865187,0,4.8144909438577885,55.95042966322,1,14.0630014978644,48.95174634903484,1,95.18550905614221,48.95174634903484,0,4.8144909438577885,57.04112266360296,1,14.0630014978644,50.042439349417805,1,95.18550905614221,50.042439349417805,0,4.8144909438577885,58.131815663985925,1,14.0630014978644,51.13313234980076,1,95.18550905614221,51.13313234980076,0,4.8144909438577885,59.22250866436889,1,14.0630014978644,52.22382535018372,1,95.18550905614221,52.22382535018372,0,4.8144909438577885,49.406271660922215,1,14.0630014978644,42.40758834673706,1,95.18550905614221,42.40758834673706,0,4.8144909438577885,50.49696466130517,1,14.0630014978644,43.49828134712001,1,95.18550905614221,43.49828134712001,0,4.8144909438577885,51.587657661688134,1,14.0630014978644,44.588974347502976,1,95.18550905614221,44.588974347502976,0,4.8144909438577885,52.67835066207111,1,14.0630014978644,45.679667347885946,1,95.18550905614221,45.679667347885946,0,4.8144909438577885,53.76904366245407,1,14.0630014978644,46.77036034826891,1,95.18550905614221,46.77036034826891,0,4.8144909438577885,43.95280665900739,1,14.0630014978644,36.954123344822236,1,95.18550905614221,36.954123344822236,0,4.8144909438577885,45.04349965939037,1,14.0630014978644,38.04481634520521,1,95.18550905614221,38.04481634520521,0,4.8144909438577885,46.134192659773326,1,14.0630014978644,39.13550934558817,1,95.18550905614221,39.13550934558817,0,4.8144909438577885,47.22488566015629,1,14.0630014978644,40.22620234597113,1,95.18550905614221,40.22620234597113,0,4.8144909438577885,48.315578660539266,1,14.0630014978644,41.31689534635411,1,95.18550905614221,41.31689534635411,0,4.8144909438577885,38.49934165709258,1,14.0630014978644,31.500658342907425,1,95.18550905614221,31.500658342907425,0,4.8144909438577885,39.59003465747554,1,14.0630014978644,32.591351343290384,1,95.18550905614221,32.591351343290384,0,4.8144909438577885,40.680727657858505,1,14.0630014978644,33.68204434367335,1,95.18550905614221,33.68204434367335,0,4.8144909438577885,41.771420658241475,1,14.0630014978644,34.77273734405632,1,95.18550905614221,34.77273734405632,0,4.8144909438577885,42.86211365862444,1,14.0630014978644,35.86343034443928,1,95.18550905614221,35.86343034443928,0,4.8144909438577885,33.045876655177764,1,14.0630014978644,26.047193340992607,1,95.18550905614221,26.047193340992607,0,4.8144909438577885,34.13656965556073,1,14.0630014978644,27.137886341375562,1,95.18550905614221,27.137886341375562,0,4.8144909438577885,35.22726265594369,1,14.0630014978644,28.22857934175853,1,95.18550905614221,28.22857934175853,0,4.8144909438577885,36.31795565632665,1,14.0630014978644,29.319272342141492,1,95.18550905614221,29.319272342141492,0,4.8144909438577885,37.40864865670962,1,14.0630014978644,30.409965342524455,1,95.18550905614221,30.409965342524455,0,4.8144909438577885,27.59241165326295,1,14.0630014978644,20.59372833907779,1,95.18550905614221,20.59372833907779,0,4.8144909438577885,28.683104653645913,1,14.0630014978644,21.68442133946075,1,95.18550905614221,21.68442133946075,0,4.8144909438577885,29.77379765402888,1,14.0630014978644,22.775114339843718,1,95.18550905614221,22.775114339843718,0,4.8144909438577885,30.864490654411846,1,14.0630014978644,23.865807340226677,1,95.18550905614221,23.865807340226677,0,4.8144909438577885,31.95518365479481,1,14.0630014978644,24.956500340609644,1,95.18550905614221,24.956500340609644,0,4.8144909438577885,22.138946651348128,1,14.0630014978644,15.140263337162965,1,95.18550905614221,15.140263337162965,0,4.8144909438577885,23.22963965173109,1,14.0630014978644,16.23095633754593,1,95.18550905614221,16.23095633754593,0,4.8144909438577885,24.320332652114057,1,14.0630014978644,17.3216493379289,1,95.18550905614221,17.3216493379289,0,4.8144909438577885,25.411025652497027,1,14.0630014978644,18.412342338311863,1,95.18550905614221,18.412342338311863,0,4.8144909438577885,26.50171865287998,1,14.0630014978644,19.503035338694822,1,95.18550905614221,19.503035338694822,0,4.8144909438577885,16.68548164943331,1,14.0630014978644,9.68679833524815,1,95.18550905614221,9.68679833524815,0,4.8144909438577885,17.776174649816273,1,14.0630014978644,10.777491335631117,1,95.18550905614221,10.777491335631117,0,4.8144909438577885,18.86686765019924,1,14.0630014978644,11.868184336014075,1,95.18550905614221,11.868184336014075,0,4.8144909438577885,19.95756065058221,1,14.0630014978644,12.958877336397043,1,95.18550905614221,12.958877336397043,0,4.8144909438577885,21.048253650965165,1,14.0630014978644,14.049570336780008,1,95.18550905614221,14.049570336780008,0,4.8144909438577885,11.232016647518504,1,14.0630014978644,4.233333333333337,1,95.18550905614221,4.233333333333337,0,4.8144909438577885,12.322709647901462,1,14.0630014978644,5.324026333716303,1,95.18550905614221,5.324026333716303,0,4.8144909438577885,13.413402648284427,1,14.0630014978644,6.414719334099262,1,95.18550905614221,6.414719334099262,0,4.8144909438577885,14.504095648667391,1,14.0630014978644,7.5054123344822266,1,95.18550905614221,7.5054123344822266,0,4.8144909438577885,15.59478864905036,1,14.0630014978644,8.596105334865193,1,95.18550905614221,8.596105334865193,15,0,4.8144909438577885,65.76666666666667,1,14.0630014978644,58.7679833524815,1,95.18550905614221,58.7679833524815,1,85.9369985021356,65.76666666666667,1,4.8144909438577885,65.76666666666667,15,0,4.8144909438577885,65.76666666666667,1,4.8144909438577885,11.232016647518504,1,14.0630014978644,4.233333333333337,1,14.0630014978644,58.7679833524815,1,4.8144909438577885,65.76666666666667,15,0,14.0630014978644,58.7679833524815,1,14.0630014978644,4.233333333333337,1,95.18550905614221,4.233333333333337,1,95.18550905614221,58.7679833524815,1,14.0630014978644,58.7679833524815,15,0,15.701294865887546,63.667061672411116,1,15.701294865887546,39.429439441678596,1,26.51762920699126,39.429439441678596,1,26.51762920699126,63.667061672411116,1,15.701294865887546,63.667061672411116,15,0,15.701294865887546,63.667061672411116,1,19.400699087490192,60.86758834673705,1,30.2170334285939,60.86758834673705,1,26.51762920699126,63.667061672411116,1,15.701294865887546,63.667061672411116,15,0,15.701294865887546,63.667061672411116,1,15.701294865887546,39.429439441678596,1,19.400699087490192,36.62996611600453,1,19.400699087490192,60.86758834673705,1,15.701294865887546,63.667061672411116,15,0,26.51762920699126,63.667061672411116,1,26.51762920699126,39.429439441678596,1,30.2170334285939,36.62996611600453,1,30.2170334285939,60.86758834673705,1,26.51762920699126,63.667061672411116,15,0,15.701294865887546,39.429439441678596,1,19.400699087490192,36.62996611600453,1,30.2170334285939,36.62996611600453,1,26.51762920699126,39.429439441678596,1,15.701294865887546,39.429439441678596,15,0,19.400699087490192,60.86758834673705,1,19.400699087490192,36.62996611600453,1,30.2170334285939,36.62996611600453,1,30.2170334285939,60.86758834673705,1,19.400699087490192,60.86758834673705,15,0,15.701294865887546,63.667061672411116,1,15.701294865887546,39.429439441678596,1,26.51762920699126,39.429439441678596,1,26.51762920699126,63.667061672411116,1,15.701294865887546,63.667061672411116,15,0,15.701294865887546,63.667061672411116,1,19.400699087490192,60.86758834673705,1,30.2170334285939,60.86758834673705,1,26.51762920699126,63.667061672411116,1,15.701294865887546,63.667061672411116,15,0,15.701294865887546,63.667061672411116,1,15.701294865887546,39.429439441678596,1,19.400699087490192,36.62996611600453,1,19.400699087490192,60.86758834673705,1,15.701294865887546,63.667061672411116,15,0,26.51762920699126,63.667061672411116,1,26.51762920699126,39.429439441678596,1,30.2170334285939,36.62996611600453,1,30.2170334285939,60.86758834673705,1,26.51762920699126,63.667061672411116,15,0,15.701294865887546,39.429439441678596,1,19.400699087490192,36.62996611600453,1,30.2170334285939,36.62996611600453,1,26.51762920699126,39.429439441678596,1,15.701294865887546,39.429439441678596,15,0,19.400699087490192,60.86758834673705,1,19.400699087490192,36.62996611600453,1,30.2170334285939,36.62996611600453,1,30.2170334285939,60.86758834673705,1,19.400699087490192,60.86758834673705,15,0,42.74213071864682,63.667061672411116,1,42.74213071864682,37.490429663220006,1,53.558465059750525,37.490429663220006,1,53.558465059750525,63.667061672411116,1,42.74213071864682,63.667061672411116,15,0,42.74213071864682,63.667061672411116,1,46.441534940249454,60.86758834673705,1,57.257869281353166,60.86758834673705,1,53.558465059750525,63.667061672411116,1,42.74213071864682,63.667061672411116,15,0,42.74213071864682,63.667061672411116,1,42.74213071864682,37.490429663220006,1,46.441534940249454,34.69095633754594,1,46.441534940249454,60.86758834673705,1,42.74213071864682,63.667061672411116,15,0,53.558465059750525,63.667061672411116,1,53.558465059750525,37.490429663220006,1,57.257869281353166,34.69095633754594,1,57.257869281353166,60.86758834673705,1,53.558465059750525,63.667061672411116,15,0,42.74213071864682,37.490429663220006,1,46.441534940249454,34.69095633754594,1,57.257869281353166,34.69095633754594,1,53.558465059750525,37.490429663220006,1,42.74213071864682,37.490429663220006,15,0,46.441534940249454,60.86758834673705,1,46.441534940249454,34.69095633754594,1,57.257869281353166,34.69095633754594,1,57.257869281353166,60.86758834673705,1,46.441534940249454,60.86758834673705,15,0,42.74213071864682,63.667061672411116,1,42.74213071864682,37.490429663220006,1,53.558465059750525,37.490429663220006,1,53.558465059750525,63.667061672411116,1,42.74213071864682,63.667061672411116,15,0,42.74213071864682,63.667061672411116,1,46.441534940249454,60.86758834673705,1,57.257869281353166,60.86758834673705,1,53.558465059750525,63.667061672411116,1,42.74213071864682,63.667061672411116,15,0,42.74213071864682,63.667061672411116,1,42.74213071864682,37.490429663220006,1,46.441534940249454,34.69095633754594,1,46.441534940249454,60.86758834673705,1,42.74213071864682,63.667061672411116,15,0,53.558465059750525,63.667061672411116,1,53.558465059750525,37.490429663220006,1,57.257869281353166,34.69095633754594,1,57.257869281353166,60.86758834673705,1,53.558465059750525,63.667061672411116,15,0,42.74213071864682,37.490429663220006,1,46.441534940249454,34.69095633754594,1,57.257869281353166,34.69095633754594,1,53.558465059750525,37.490429663220006,1,42.74213071864682,37.490429663220006,15,0,46.441534940249454,60.86758834673705,1,46.441534940249454,34.69095633754594,1,57.257869281353166,34.69095633754594,1,57.257869281353166,60.86758834673705,1,46.441534940249454,60.86758834673705,15,0,69.7829665714061,63.667061672411116,1,69.7829665714061,9.132411653262949,1,80.59930091250982,9.132411653262949,1,80.59930091250982,63.667061672411116,1,69.7829665714061,63.667061672411116,15,0,69.7829665714061,63.667061672411116,1,73.48237079300874,60.86758834673705,1,84.29870513411248,60.86758834673705,1,80.59930091250982,63.667061672411116,1,69.7829665714061,63.667061672411116,15,0,69.7829665714061,63.667061672411116,1,69.7829665714061,9.132411653262949,1,73.48237079300874,6.3329383275888835,1,73.48237079300874,60.86758834673705,1,69.7829665714061,63.667061672411116,15,0,80.59930091250982,63.667061672411116,1,80.59930091250982,9.132411653262949,1,84.29870513411248,6.3329383275888835,1,84.29870513411248,60.86758834673705,1,80.59930091250982,63.667061672411116,15,0,69.7829665714061,9.132411653262949,1,73.48237079300874,6.3329383275888835,1,84.29870513411248,6.3329383275888835,1,80.59930091250982,9.132411653262949,1,69.7829665714061,9.132411653262949,15,0,73.48237079300874,60.86758834673705,1,73.48237079300874,6.3329383275888835,1,84.29870513411248,6.3329383275888835,1,84.29870513411248,60.86758834673705,1,73.48237079300874,60.86758834673705,15,0,69.7829665714061,63.667061672411116,1,69.7829665714061,9.132411653262949,1,80.59930091250982,9.132411653262949,1,80.59930091250982,63.667061672411116,1,69.7829665714061,63.667061672411116,15,0,69.7829665714061,63.667061672411116,1,73.48237079300874,60.86758834673705,1,84.29870513411248,60.86758834673705,1,80.59930091250982,63.667061672411116,1,69.7829665714061,63.667061672411116,15,0,69.7829665714061,63.667061672411116,1,69.7829665714061,9.132411653262949,1,73.48237079300874,6.3329383275888835,1,73.48237079300874,60.86758834673705,1,69.7829665714061,63.667061672411116,15,0,80.59930091250982,63.667061672411116,1,80.59930091250982,9.132411653262949,1,84.29870513411248,6.3329383275888835,1,84.29870513411248,60.86758834673705,1,80.59930091250982,63.667061672411116,15,0,69.7829665714061,9.132411653262949,1,73.48237079300874,6.3329383275888835,1,84.29870513411248,6.3329383275888835,1,80.59930091250982,9.132411653262949,1,69.7829665714061,9.132411653262949,15,0,73.48237079300874,60.86758834673705,1,73.48237079300874,6.3329383275888835,1,84.29870513411248,6.3329383275888835,1,84.29870513411248,60.86758834673705,1,73.48237079300874,60.86758834673705,15,0,15.701294865887546,39.429439441678596,1,15.701294865887546,9.132411653262949,1,26.51762920699126,9.132411653262949,1,26.51762920699126,39.429439441678596,1,15.701294865887546,39.429439441678596,15,0,15.701294865887546,39.429439441678596,1,19.400699087490192,36.62996611600453,1,30.2170334285939,36.62996611600453,1,26.51762920699126,39.429439441678596,1,15.701294865887546,39.429439441678596,15,0,15.701294865887546,39.429439441678596,1,15.701294865887546,9.132411653262949,1,19.400699087490192,6.3329383275888835,1,19.400699087490192,36.62996611600453,1,15.701294865887546,39.429439441678596,15,0,26.51762920699126,39.429439441678596,1,26.51762920699126,9.132411653262949,1,30.2170334285939,6.3329383275888835,1,30.2170334285939,36.62996611600453,1,26.51762920699126,39.429439441678596,15,0,15.701294865887546,9.132411653262949,1,19.400699087490192,6.3329383275888835,1,30.2170334285939,6.3329383275888835,1,26.51762920699126,9.132411653262949,1,15.701294865887546,9.132411653262949,15,0,19.400699087490192,36.62996611600453,1,19.400699087490192,6.3329383275888835,1,30.2170334285939,6.3329383275888835,1,30.2170334285939,36.62996611600453,1,19.400699087490192,36.62996611600453,15,0,15.701294865887546,39.429439441678596,1,15.701294865887546,9.132411653262949,1,26.51762920699126,9.132411653262949,1,26.51762920699126,39.429439441678596,1,15.701294865887546,39.429439441678596,15,0,15.701294865887546,39.429439441678596,1,19.400699087490192,36.62996611600453,1,30.2170334285939,36.62996611600453,1,26.51762920699126,39.429439441678596,1,15.701294865887546,39.429439441678596,15,0,15.701294865887546,39.429439441678596,1,15.701294865887546,9.132411653262949,1,19.400699087490192,6.3329383275888835,1,19.400699087490192,36.62996611600453,1,15.701294865887546,39.429439441678596,15,0,26.51762920699126,39.429439441678596,1,26.51762920699126,9.132411653262949,1,30.2170334285939,6.3329383275888835,1,30.2170334285939,36.62996611600453,1,26.51762920699126,39.429439441678596,15,0,15.701294865887546,9.132411653262949,1,19.400699087490192,6.3329383275888835,1,30.2170334285939,6.3329383275888835,1,26.51762920699126,9.132411653262949,1,15.701294865887546,9.132411653262949,15,0,19.400699087490192,36.62996611600453,1,19.400699087490192,6.3329383275888835,1,30.2170334285939,6.3329383275888835,1,30.2170334285939,36.62996611600453,1,19.400699087490192,36.62996611600453,15,0,42.74213071864682,37.490429663220006,1,42.74213071864682,9.132411653262949,1,53.558465059750525,9.132411653262949,1,53.558465059750525,37.490429663220006,1,42.74213071864682,37.490429663220006,15,0,42.74213071864682,37.490429663220006,1,46.441534940249454,34.69095633754594,1,57.257869281353166,34.69095633754594,1,53.558465059750525,37.490429663220006,1,42.74213071864682,37.490429663220006,15,0,42.74213071864682,37.490429663220006,1,42.74213071864682,9.132411653262949,1,46.441534940249454,6.3329383275888835,1,46.441534940249454,34.69095633754594,1,42.74213071864682,37.490429663220006,15,0,53.558465059750525,37.490429663220006,1,53.558465059750525,9.132411653262949,1,57.257869281353166,6.3329383275888835,1,57.257869281353166,34.69095633754594,1,53.558465059750525,37.490429663220006,15,0,42.74213071864682,9.132411653262949,1,46.441534940249454,6.3329383275888835,1,57.257869281353166,6.3329383275888835,1,53.558465059750525,9.132411653262949,1,42.74213071864682,9.132411653262949,15,0,46.441534940249454,34.69095633754594,1,46.441534940249454,6.3329383275888835,1,57.257869281353166,6.3329383275888835,1,57.257869281353166,34.69095633754594,1,46.441534940249454,34.69095633754594,15,0,42.74213071864682,37.490429663220006,1,42.74213071864682,9.132411653262949,1,53.558465059750525,9.132411653262949,1,53.558465059750525,37.490429663220006,1,42.74213071864682,37.490429663220006,15,0,42.74213071864682,37.490429663220006,1,46.441534940249454,34.69095633754594,1,57.257869281353166,34.69095633754594,1,53.558465059750525,37.490429663220006,1,42.74213071864682,37.490429663220006,15,0,42.74213071864682,37.490429663220006,1,42.74213071864682,9.132411653262949,1,46.441534940249454,6.3329383275888835,1,46.441534940249454,34.69095633754594,1,42.74213071864682,37.490429663220006,15,0,53.558465059750525,37.490429663220006,1,53.558465059750525,9.132411653262949,1,57.257869281353166,6.3329383275888835,1,57.257869281353166,34.69095633754594,1,53.558465059750525,37.490429663220006,15,0,42.74213071864682,9.132411653262949,1,46.441534940249454,6.3329383275888835,1,57.257869281353166,6.3329383275888835,1,53.558465059750525,9.132411653262949,1,42.74213071864682,9.132411653262949,15,0,46.441534940249454,34.69095633754594,1,46.441534940249454,6.3329383275888835,1,57.257869281353166,6.3329383275888835,1,57.257869281353166,34.69095633754594,1,46.441534940249454,34.69095633754594,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
		"barStackedPercent3DPerspective": "15,0,21.013480335383846,45.12844427176431,1,95.55121028230624,45.12844427176431,1,95.55121028230624,11.723091156440482,1,21.013480335383846,11.723091156440482,0,21.013480335383846,45.12844427176431,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,63,0,4.233333333333333,58.13327125398591,1,21.22893671974426,45.27208186133791,1,95.76666666666668,45.27208186133791,0,4.233333333333333,52.56571240143195,1,21.22893671974426,39.70452300878394,1,95.76666666666668,39.70452300878394,0,4.233333333333333,46.99815354887799,1,21.22893671974426,34.13696415622997,1,95.76666666666668,34.13696415622997,0,4.233333333333333,41.430594696324015,1,21.22893671974426,28.569405303675996,1,95.76666666666668,28.569405303675996,0,4.233333333333333,35.86303584377004,1,21.22893671974426,23.00184645112203,1,95.76666666666668,23.00184645112203,0,4.233333333333333,30.295476991216074,1,21.22893671974426,17.434287598568062,1,95.76666666666668,17.434287598568062,0,4.233333333333333,24.72791813866211,1,21.22893671974426,11.866728746014084,1,95.76666666666668,11.866728746014084,279,0,4.233333333333333,58.13327125398591,1,21.22893671974426,45.27208186133791,1,95.76666666666668,45.27208186133791,0,4.233333333333333,52.56571240143195,1,21.22893671974426,39.70452300878394,1,95.76666666666668,39.70452300878394,0,4.233333333333333,53.679224171942735,1,21.22893671974426,40.818034779294734,1,95.76666666666668,40.818034779294734,0,4.233333333333333,54.79273594245353,1,21.22893671974426,41.93154654980553,1,95.76666666666668,41.93154654980553,0,4.233333333333333,55.90624771296434,1,21.22893671974426,43.045058320316315,1,95.76666666666668,43.045058320316315,0,4.233333333333333,57.01975948347513,1,21.22893671974426,44.15857009082711,1,95.76666666666668,44.15857009082711,0,4.233333333333333,46.99815354887799,1,21.22893671974426,34.13696415622997,1,95.76666666666668,34.13696415622997,0,4.233333333333333,48.11166531938878,1,21.22893671974426,35.25047592674076,1,95.76666666666668,35.25047592674076,0,4.233333333333333,49.22517708989957,1,21.22893671974426,36.36398769725155,1,95.76666666666668,36.36398769725155,0,4.233333333333333,50.33868886041036,1,21.22893671974426,37.47749946776236,1,95.76666666666668,37.47749946776236,0,4.233333333333333,51.452200630921155,1,21.22893671974426,38.59101123827314,1,95.76666666666668,38.59101123827314,0,4.233333333333333,41.430594696324015,1,21.22893671974426,28.569405303675996,1,95.76666666666668,28.569405303675996,0,4.233333333333333,42.544106466834805,1,21.22893671974426,29.68291707418679,1,95.76666666666668,29.68291707418679,0,4.233333333333333,43.6576182373456,1,21.22893671974426,30.796428844697584,1,95.76666666666668,30.796428844697584,0,4.233333333333333,44.771130007856385,1,21.22893671974426,31.909940615208377,1,95.76666666666668,31.909940615208377,0,4.233333333333333,45.884641778367175,1,21.22893671974426,33.02345238571917,1,95.76666666666668,33.02345238571917,0,4.233333333333333,35.86303584377004,1,21.22893671974426,23.00184645112203,1,95.76666666666668,23.00184645112203,0,4.233333333333333,36.97654761428084,1,21.22893671974426,24.11535822163282,1,95.76666666666668,24.11535822163282,0,4.233333333333333,38.09005938479163,1,21.22893671974426,25.22886999214362,1,95.76666666666668,25.22886999214362,0,4.233333333333333,39.203571155302434,1,21.22893671974426,26.34238176265441,1,95.76666666666668,26.34238176265441,0,4.233333333333333,40.31708292581322,1,21.22893671974426,27.455893533165206,1,95.76666666666668,27.455893533165206,0,4.233333333333333,30.295476991216074,1,21.22893671974426,17.434287598568062,1,95.76666666666668,17.434287598568062,0,4.233333333333333,31.408988761726867,1,21.22893671974426,18.54779936907886,1,95.76666666666668,18.54779936907886,0,4.233333333333333,32.522500532237665,1,21.22893671974426,19.66131113958965,1,95.76666666666668,19.66131113958965,0,4.233333333333333,33.63601230274846,1,21.22893671974426,20.77482291010045,1,95.76666666666668,20.77482291010045,0,4.233333333333333,34.74952407325926,1,21.22893671974426,21.888334680611234,1,95.76666666666668,21.888334680611234,0,4.233333333333333,24.72791813866211,1,21.22893671974426,11.866728746014084,1,95.76666666666668,11.866728746014084,0,4.233333333333333,25.841429909172902,1,21.22893671974426,12.980240516524882,1,95.76666666666668,12.980240516524882,0,4.233333333333333,26.954941679683692,1,21.22893671974426,14.093752287035672,1,95.76666666666668,14.093752287035672,0,4.233333333333333,28.06845345019448,1,21.22893671974426,15.20726405754647,1,95.76666666666668,15.20726405754647,0,4.233333333333333,29.18196522070528,1,21.22893671974426,16.320775828057265,1,95.76666666666668,16.320775828057265,15,0,4.233333333333333,58.13327125398591,1,21.22893671974426,45.27208186133791,1,95.76666666666668,45.27208186133791,1,78.77106328025575,58.13327125398591,1,4.233333333333333,58.13327125398591,15,0,4.233333333333333,58.13327125398591,1,4.233333333333333,24.72791813866211,1,21.22893671974426,11.866728746014084,1,21.22893671974426,45.27208186133791,1,4.233333333333333,58.13327125398591,15,0,21.22893671974426,45.27208186133791,1,21.22893671974426,11.866728746014084,1,95.76666666666668,11.866728746014084,1,95.76666666666668,45.27208186133791,1,21.22893671974426,45.27208186133791,15,0,14.236446835987218,56.20409284508871,1,14.236446835987218,33.933857434872834,1,24.1748108289102,33.933857434872834,1,24.1748108289102,56.20409284508871,1,14.236446835987218,56.20409284508871,15,0,14.236446835987218,56.20409284508871,1,17.635567513269404,53.63185496655912,1,27.573931506192384,53.63185496655912,1,24.1748108289102,56.20409284508871,1,14.236446835987218,56.20409284508871,15,0,14.236446835987218,56.20409284508871,1,14.236446835987218,33.933857434872834,1,17.635567513269404,31.361619556343232,1,17.635567513269404,53.63185496655912,1,14.236446835987218,56.20409284508871,15,0,24.1748108289102,56.20409284508871,1,24.1748108289102,33.933857434872834,1,27.573931506192384,31.361619556343232,1,27.573931506192384,53.63185496655912,1,24.1748108289102,56.20409284508871,15,0,14.236446835987218,33.933857434872834,1,17.635567513269404,31.361619556343232,1,27.573931506192384,31.361619556343232,1,24.1748108289102,33.933857434872834,1,14.236446835987218,33.933857434872834,15,0,17.635567513269404,53.63185496655912,1,17.635567513269404,31.361619556343232,1,27.573931506192384,31.361619556343232,1,27.573931506192384,53.63185496655912,1,17.635567513269404,53.63185496655912,15,0,14.236446835987218,56.20409284508871,1,14.236446835987218,33.933857434872834,1,24.1748108289102,33.933857434872834,1,24.1748108289102,56.20409284508871,1,14.236446835987218,56.20409284508871,15,0,14.236446835987218,56.20409284508871,1,17.635567513269404,53.63185496655912,1,27.573931506192384,53.63185496655912,1,24.1748108289102,56.20409284508871,1,14.236446835987218,56.20409284508871,15,0,14.236446835987218,56.20409284508871,1,14.236446835987218,33.933857434872834,1,17.635567513269404,31.361619556343232,1,17.635567513269404,53.63185496655912,1,14.236446835987218,56.20409284508871,15,0,24.1748108289102,56.20409284508871,1,24.1748108289102,33.933857434872834,1,27.573931506192384,31.361619556343232,1,27.573931506192384,53.63185496655912,1,24.1748108289102,56.20409284508871,15,0,14.236446835987218,33.933857434872834,1,17.635567513269404,31.361619556343232,1,27.573931506192384,31.361619556343232,1,24.1748108289102,33.933857434872834,1,14.236446835987218,33.933857434872834,15,0,17.635567513269404,53.63185496655912,1,17.635567513269404,31.361619556343232,1,27.573931506192384,31.361619556343232,1,27.573931506192384,53.63185496655912,1,17.635567513269404,53.63185496655912,15,0,39.08235681829468,56.20409284508871,1,39.08235681829468,29.479810352829663,1,49.020720811217664,29.479810352829663,1,49.020720811217664,56.20409284508871,1,39.08235681829468,56.20409284508871,15,0,39.08235681829468,56.20409284508871,1,42.48147749557686,53.63185496655912,1,52.41984148849984,53.63185496655912,1,49.020720811217664,56.20409284508871,1,39.08235681829468,56.20409284508871,15,0,39.08235681829468,56.20409284508871,1,39.08235681829468,29.479810352829663,1,42.48147749557686,26.90757247430006,1,42.48147749557686,53.63185496655912,1,39.08235681829468,56.20409284508871,15,0,49.020720811217664,56.20409284508871,1,49.020720811217664,29.479810352829663,1,52.41984148849984,26.90757247430006,1,52.41984148849984,53.63185496655912,1,49.020720811217664,56.20409284508871,15,0,39.08235681829468,29.479810352829663,1,42.48147749557686,26.90757247430006,1,52.41984148849984,26.90757247430006,1,49.020720811217664,29.479810352829663,1,39.08235681829468,29.479810352829663,15,0,42.48147749557686,53.63185496655912,1,42.48147749557686,26.90757247430006,1,52.41984148849984,26.90757247430006,1,52.41984148849984,53.63185496655912,1,42.48147749557686,53.63185496655912,15,0,39.08235681829468,56.20409284508871,1,39.08235681829468,29.479810352829663,1,49.020720811217664,29.479810352829663,1,49.020720811217664,56.20409284508871,1,39.08235681829468,56.20409284508871,15,0,39.08235681829468,56.20409284508871,1,42.48147749557686,53.63185496655912,1,52.41984148849984,53.63185496655912,1,49.020720811217664,56.20409284508871,1,39.08235681829468,56.20409284508871,15,0,39.08235681829468,56.20409284508871,1,39.08235681829468,29.479810352829663,1,42.48147749557686,26.90757247430006,1,42.48147749557686,53.63185496655912,1,39.08235681829468,56.20409284508871,15,0,49.020720811217664,56.20409284508871,1,49.020720811217664,29.479810352829663,1,52.41984148849984,26.90757247430006,1,52.41984148849984,53.63185496655912,1,49.020720811217664,56.20409284508871,15,0,39.08235681829468,29.479810352829663,1,42.48147749557686,26.90757247430006,1,52.41984148849984,26.90757247430006,1,49.020720811217664,29.479810352829663,1,39.08235681829468,29.479810352829663,15,0,42.48147749557686,53.63185496655912,1,42.48147749557686,26.90757247430006,1,52.41984148849984,26.90757247430006,1,52.41984148849984,53.63185496655912,1,42.48147749557686,53.63185496655912,15,0,63.92826680060216,56.20409284508871,1,63.92826680060216,25.025763270786484,1,73.86663079352513,25.025763270786484,1,73.86663079352513,56.20409284508871,1,63.92826680060216,56.20409284508871,15,0,63.92826680060216,56.20409284508871,1,67.32738747788434,53.63185496655912,1,77.26575147080733,53.63185496655912,1,73.86663079352513,56.20409284508871,1,63.92826680060216,56.20409284508871,15,0,63.92826680060216,56.20409284508871,1,63.92826680060216,25.025763270786484,1,67.32738747788434,22.453525392256882,1,67.32738747788434,53.63185496655912,1,63.92826680060216,56.20409284508871,15,0,73.86663079352513,56.20409284508871,1,73.86663079352513,25.025763270786484,1,77.26575147080733,22.453525392256882,1,77.26575147080733,53.63185496655912,1,73.86663079352513,56.20409284508871,15,0,63.92826680060216,25.025763270786484,1,67.32738747788434,22.453525392256882,1,77.26575147080733,22.453525392256882,1,73.86663079352513,25.025763270786484,1,63.92826680060216,25.025763270786484,15,0,67.32738747788434,53.63185496655912,1,67.32738747788434,22.453525392256882,1,77.26575147080733,22.453525392256882,1,77.26575147080733,53.63185496655912,1,67.32738747788434,53.63185496655912,15,0,63.92826680060216,56.20409284508871,1,63.92826680060216,25.025763270786484,1,73.86663079352513,25.025763270786484,1,73.86663079352513,56.20409284508871,1,63.92826680060216,56.20409284508871,15,0,63.92826680060216,56.20409284508871,1,67.32738747788434,53.63185496655912,1,77.26575147080733,53.63185496655912,1,73.86663079352513,56.20409284508871,1,63.92826680060216,56.20409284508871,15,0,63.92826680060216,56.20409284508871,1,63.92826680060216,25.025763270786484,1,67.32738747788434,22.453525392256882,1,67.32738747788434,53.63185496655912,1,63.92826680060216,56.20409284508871,15,0,73.86663079352513,56.20409284508871,1,73.86663079352513,25.025763270786484,1,77.26575147080733,22.453525392256882,1,77.26575147080733,53.63185496655912,1,73.86663079352513,56.20409284508871,15,0,63.92826680060216,25.025763270786484,1,67.32738747788434,22.453525392256882,1,77.26575147080733,22.453525392256882,1,73.86663079352513,25.025763270786484,1,63.92826680060216,25.025763270786484,15,0,67.32738747788434,53.63185496655912,1,67.32738747788434,22.453525392256882,1,77.26575147080733,22.453525392256882,1,77.26575147080733,53.63185496655912,1,67.32738747788434,53.63185496655912,15,0,22.734248529192683,49.7734981487647,1,22.734248529192683,21.935703885994865,1,32.67261252211567,21.935703885994865,1,32.67261252211567,49.7734981487647,1,22.734248529192683,49.7734981487647,15,0,22.734248529192683,49.7734981487647,1,26.133369206474867,47.2012602702351,1,36.071733199397855,47.2012602702351,1,32.67261252211567,49.7734981487647,1,22.734248529192683,49.7734981487647,15,0,22.734248529192683,49.7734981487647,1,22.734248529192683,21.935703885994865,1,26.133369206474867,19.363466007465263,1,26.133369206474867,47.2012602702351,1,22.734248529192683,49.7734981487647,15,0,32.67261252211567,49.7734981487647,1,32.67261252211567,21.935703885994865,1,36.071733199397855,19.363466007465263,1,36.071733199397855,47.2012602702351,1,32.67261252211567,49.7734981487647,15,0,22.734248529192683,21.935703885994865,1,26.133369206474867,19.363466007465263,1,36.071733199397855,19.363466007465263,1,32.67261252211567,21.935703885994865,1,22.734248529192683,21.935703885994865,15,0,26.133369206474867,47.2012602702351,1,26.133369206474867,19.363466007465263,1,36.071733199397855,19.363466007465263,1,36.071733199397855,47.2012602702351,1,26.133369206474867,47.2012602702351,15,0,22.734248529192683,49.7734981487647,1,22.734248529192683,21.935703885994865,1,32.67261252211567,21.935703885994865,1,32.67261252211567,49.7734981487647,1,22.734248529192683,49.7734981487647,15,0,22.734248529192683,49.7734981487647,1,26.133369206474867,47.2012602702351,1,36.071733199397855,47.2012602702351,1,32.67261252211567,49.7734981487647,1,22.734248529192683,49.7734981487647,15,0,22.734248529192683,49.7734981487647,1,22.734248529192683,21.935703885994865,1,26.133369206474867,19.363466007465263,1,26.133369206474867,47.2012602702351,1,22.734248529192683,49.7734981487647,15,0,32.67261252211567,49.7734981487647,1,32.67261252211567,21.935703885994865,1,36.071733199397855,19.363466007465263,1,36.071733199397855,47.2012602702351,1,32.67261252211567,49.7734981487647,15,0,22.734248529192683,21.935703885994865,1,26.133369206474867,19.363466007465263,1,36.071733199397855,19.363466007465263,1,32.67261252211567,21.935703885994865,1,22.734248529192683,21.935703885994865,15,0,26.133369206474867,47.2012602702351,1,26.133369206474867,19.363466007465263,1,36.071733199397855,19.363466007465263,1,36.071733199397855,47.2012602702351,1,26.133369206474867,47.2012602702351,15,0,47.580158511500144,49.7734981487647,1,47.580158511500144,20.82219211548407,1,57.51852250442313,20.82219211548407,1,57.51852250442313,49.7734981487647,1,47.580158511500144,49.7734981487647,15,0,47.580158511500144,49.7734981487647,1,50.97927918878233,47.2012602702351,1,60.91764318170531,47.2012602702351,1,57.51852250442313,49.7734981487647,1,47.580158511500144,49.7734981487647,15,0,47.580158511500144,49.7734981487647,1,47.580158511500144,20.82219211548407,1,50.97927918878233,18.24995423695447,1,50.97927918878233,47.2012602702351,1,47.580158511500144,49.7734981487647,15,0,57.51852250442313,49.7734981487647,1,57.51852250442313,20.82219211548407,1,60.91764318170531,18.24995423695447,1,60.91764318170531,47.2012602702351,1,57.51852250442313,49.7734981487647,15,0,47.580158511500144,20.82219211548407,1,50.97927918878233,18.24995423695447,1,60.91764318170531,18.24995423695447,1,57.51852250442313,20.82219211548407,1,47.580158511500144,20.82219211548407,15,0,50.97927918878233,47.2012602702351,1,50.97927918878233,18.24995423695447,1,60.91764318170531,18.24995423695447,1,60.91764318170531,47.2012602702351,1,50.97927918878233,47.2012602702351,15,0,47.580158511500144,49.7734981487647,1,47.580158511500144,20.82219211548407,1,57.51852250442313,20.82219211548407,1,57.51852250442313,49.7734981487647,1,47.580158511500144,49.7734981487647,15,0,47.580158511500144,49.7734981487647,1,50.97927918878233,47.2012602702351,1,60.91764318170531,47.2012602702351,1,57.51852250442313,49.7734981487647,1,47.580158511500144,49.7734981487647,15,0,47.580158511500144,49.7734981487647,1,47.580158511500144,20.82219211548407,1,50.97927918878233,18.24995423695447,1,50.97927918878233,47.2012602702351,1,47.580158511500144,49.7734981487647,15,0,57.51852250442313,49.7734981487647,1,57.51852250442313,20.82219211548407,1,60.91764318170531,18.24995423695447,1,60.91764318170531,47.2012602702351,1,57.51852250442313,49.7734981487647,15,0,47.580158511500144,20.82219211548407,1,50.97927918878233,18.24995423695447,1,60.91764318170531,18.24995423695447,1,57.51852250442313,20.82219211548407,1,47.580158511500144,20.82219211548407,15,0,50.97927918878233,47.2012602702351,1,50.97927918878233,18.24995423695447,1,60.91764318170531,18.24995423695447,1,60.91764318170531,47.2012602702351,1,50.97927918878233,47.2012602702351,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
		"horizontalBar": "15,0,4.233333333333333,65.2375,1,95.23750000000001,65.2375,1,95.23750000000001,4.23333333333333,1,4.233333333333333,4.23333333333333,1,4.233333333333333,65.2375,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,42,0,4.497916666666668,4.497916666666663,1,4.497916666666668,65.50208333333333,0,19.66527777777778,4.497916666666663,1,19.66527777777778,65.50208333333333,0,34.83263888888889,4.497916666666663,1,34.83263888888889,65.50208333333333,0,50,4.497916666666663,1,50,65.50208333333333,0,65.1673611111111,4.497916666666663,1,65.1673611111111,65.50208333333333,0,80.33472222222224,4.497916666666663,1,80.33472222222224,65.50208333333333,0,95.50208333333333,4.497916666666663,1,95.50208333333333,65.50208333333333,222,0,4.497916666666668,4.497916666666663,1,4.497916666666668,65.50208333333333,0,7.5313888888888885,4.497916666666663,1,7.5313888888888885,65.50208333333333,0,10.564861111111112,4.497916666666663,1,10.564861111111112,65.50208333333333,0,13.598333333333333,4.497916666666663,1,13.598333333333333,65.50208333333333,0,16.631805555555555,4.497916666666663,1,16.631805555555555,65.50208333333333,0,19.66527777777778,4.497916666666663,1,19.66527777777778,65.50208333333333,0,19.66527777777778,4.497916666666663,1,19.66527777777778,65.50208333333333,0,22.69875,4.497916666666663,1,22.69875,65.50208333333333,0,25.732222222222223,4.497916666666663,1,25.732222222222223,65.50208333333333,0,28.765694444444446,4.497916666666663,1,28.765694444444446,65.50208333333333,0,31.799166666666665,4.497916666666663,1,31.799166666666665,65.50208333333333,0,34.83263888888889,4.497916666666663,1,34.83263888888889,65.50208333333333,0,34.83263888888889,4.497916666666663,1,34.83263888888889,65.50208333333333,0,37.86611111111112,4.497916666666663,1,37.86611111111112,65.50208333333333,0,40.89958333333334,4.497916666666663,1,40.89958333333334,65.50208333333333,0,43.933055555555555,4.497916666666663,1,43.933055555555555,65.50208333333333,0,46.966527777777785,4.497916666666663,1,46.966527777777785,65.50208333333333,0,50,4.497916666666663,1,50,65.50208333333333,0,50,4.497916666666663,1,50,65.50208333333333,0,53.03347222222222,4.497916666666663,1,53.03347222222222,65.50208333333333,0,56.066944444444445,4.497916666666663,1,56.066944444444445,65.50208333333333,0,59.100416666666675,4.497916666666663,1,59.100416666666675,65.50208333333333,0,62.1338888888889,4.497916666666663,1,62.1338888888889,65.50208333333333,0,65.1673611111111,4.497916666666663,1,65.1673611111111,65.50208333333333,0,65.1673611111111,4.497916666666663,1,65.1673611111111,65.50208333333333,0,68.20083333333332,4.497916666666663,1,68.20083333333332,65.50208333333333,0,71.23430555555558,4.497916666666663,1,71.23430555555558,65.50208333333333,0,74.2677777777778,4.497916666666663,1,74.2677777777778,65.50208333333333,0,77.30125000000001,4.497916666666663,1,77.30125000000001,65.50208333333333,0,80.33472222222223,4.497916666666663,1,80.33472222222223,65.50208333333333,0,80.33472222222224,4.497916666666663,1,80.33472222222224,65.50208333333333,0,83.36819444444447,4.497916666666663,1,83.36819444444447,65.50208333333333,0,86.4016666666667,4.497916666666663,1,86.4016666666667,65.50208333333333,0,89.4351388888889,4.497916666666663,1,89.4351388888889,65.50208333333333,0,92.46861111111112,4.497916666666663,1,92.46861111111112,65.50208333333333,0,95.50208333333333,4.497916666666663,1,95.50208333333333,65.50208333333333,0,95.50208333333333,4.497916666666663,1,95.50208333333333,65.50208333333333,15,0,4.497916666666668,61.144642857142856,1,4.497916666666668,55.334722222222226,1,65.1673611111111,55.334722222222226,1,65.1673611111111,61.144642857142856,1,4.497916666666668,61.144642857142856,15,0,4.497916666666668,40.80992063492064,1,4.497916666666668,34.99999999999999,1,77.30125000000001,34.99999999999999,1,77.30125000000001,40.80992063492064,1,4.497916666666668,40.80992063492064,15,0,4.497916666666668,20.47519841269841,1,4.497916666666668,14.66527777777778,1,89.43513888888889,14.66527777777778,1,89.43513888888889,20.47519841269841,1,4.497916666666668,20.47519841269841,15,0,4.497916666666668,55.33472222222222,1,4.497916666666668,49.524801587301575,1,80.33472222222224,49.524801587301575,1,80.33472222222224,55.33472222222222,1,4.497916666666668,55.33472222222222,15,0,4.497916666666668,34.99999999999999,1,4.497916666666668,29.190079365079363,1,83.36819444444444,29.190079365079363,1,83.36819444444444,34.99999999999999,1,4.497916666666668,34.99999999999999,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
		"horizontalBarStacked": "15,0,4.233333333333333,65.2375,1,95.23750000000001,65.2375,1,95.23750000000001,4.23333333333333,1,4.233333333333333,4.23333333333333,1,4.233333333333333,65.2375,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,42,0,4.497916666666668,4.497916666666663,1,4.497916666666668,65.50208333333333,0,19.66527777777778,4.497916666666663,1,19.66527777777778,65.50208333333333,0,34.83263888888889,4.497916666666663,1,34.83263888888889,65.50208333333333,0,50,4.497916666666663,1,50,65.50208333333333,0,65.1673611111111,4.497916666666663,1,65.1673611111111,65.50208333333333,0,80.33472222222224,4.497916666666663,1,80.33472222222224,65.50208333333333,0,95.50208333333333,4.497916666666663,1,95.50208333333333,65.50208333333333,222,0,4.497916666666668,4.497916666666663,1,4.497916666666668,65.50208333333333,0,7.5313888888888885,4.497916666666663,1,7.5313888888888885,65.50208333333333,0,10.564861111111112,4.497916666666663,1,10.564861111111112,65.50208333333333,0,13.598333333333333,4.497916666666663,1,13.598333333333333,65.50208333333333,0,16.631805555555555,4.497916666666663,1,16.631805555555555,65.50208333333333,0,19.66527777777778,4.497916666666663,1,19.66527777777778,65.50208333333333,0,19.66527777777778,4.497916666666663,1,19.66527777777778,65.50208333333333,0,22.69875,4.497916666666663,1,22.69875,65.50208333333333,0,25.732222222222223,4.497916666666663,1,25.732222222222223,65.50208333333333,0,28.765694444444446,4.497916666666663,1,28.765694444444446,65.50208333333333,0,31.799166666666665,4.497916666666663,1,31.799166666666665,65.50208333333333,0,34.83263888888889,4.497916666666663,1,34.83263888888889,65.50208333333333,0,34.83263888888889,4.497916666666663,1,34.83263888888889,65.50208333333333,0,37.86611111111112,4.497916666666663,1,37.86611111111112,65.50208333333333,0,40.89958333333334,4.497916666666663,1,40.89958333333334,65.50208333333333,0,43.933055555555555,4.497916666666663,1,43.933055555555555,65.50208333333333,0,46.966527777777785,4.497916666666663,1,46.966527777777785,65.50208333333333,0,50,4.497916666666663,1,50,65.50208333333333,0,50,4.497916666666663,1,50,65.50208333333333,0,53.03347222222222,4.497916666666663,1,53.03347222222222,65.50208333333333,0,56.066944444444445,4.497916666666663,1,56.066944444444445,65.50208333333333,0,59.100416666666675,4.497916666666663,1,59.100416666666675,65.50208333333333,0,62.1338888888889,4.497916666666663,1,62.1338888888889,65.50208333333333,0,65.1673611111111,4.497916666666663,1,65.1673611111111,65.50208333333333,0,65.1673611111111,4.497916666666663,1,65.1673611111111,65.50208333333333,0,68.20083333333332,4.497916666666663,1,68.20083333333332,65.50208333333333,0,71.23430555555558,4.497916666666663,1,71.23430555555558,65.50208333333333,0,74.2677777777778,4.497916666666663,1,74.2677777777778,65.50208333333333,0,77.30125000000001,4.497916666666663,1,77.30125000000001,65.50208333333333,0,80.33472222222223,4.497916666666663,1,80.33472222222223,65.50208333333333,0,80.33472222222224,4.497916666666663,1,80.33472222222224,65.50208333333333,0,83.36819444444447,4.497916666666663,1,83.36819444444447,65.50208333333333,0,86.4016666666667,4.497916666666663,1,86.4016666666667,65.50208333333333,0,89.4351388888889,4.497916666666663,1,89.4351388888889,65.50208333333333,0,92.46861111111112,4.497916666666663,1,92.46861111111112,65.50208333333333,0,95.50208333333333,4.497916666666663,1,95.50208333333333,65.50208333333333,0,95.50208333333333,4.497916666666663,1,95.50208333333333,65.50208333333333,15,0,4.497916666666668,59.40166666666667,1,4.497916666666668,51.26777777777777,1,34.83263888888889,51.26777777777777,1,34.83263888888889,59.40166666666667,1,4.497916666666668,59.40166666666667,15,0,4.497916666666668,39.06694444444444,1,4.497916666666668,30.93305555555555,1,40.89958333333334,30.93305555555555,1,40.89958333333334,39.06694444444444,1,4.497916666666668,39.06694444444444,15,0,4.497916666666668,18.732222222222223,1,4.497916666666668,10.598333333333334,1,46.966527777777785,10.598333333333334,1,46.966527777777785,18.732222222222223,1,4.497916666666668,18.732222222222223,15,0,34.83263888888889,59.40166666666667,1,34.83263888888889,51.26777777777777,1,72.75104166666668,51.26777777777777,1,72.75104166666668,59.40166666666667,1,34.83263888888889,59.40166666666667,15,0,40.89958333333334,39.06694444444444,1,40.89958333333334,30.93305555555555,1,80.33472222222225,30.93305555555555,1,80.33472222222225,39.06694444444444,1,40.89958333333334,39.06694444444444,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
		"horizontalBarStackedPercent": "15,0,4.233333333333333,65.2375,1,95.23750000000001,65.2375,1,95.23750000000001,4.23333333333333,1,4.233333333333333,4.23333333333333,1,4.233333333333333,65.2375,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,36,0,4.497916666666668,4.497916666666663,1,4.497916666666668,65.50208333333333,0,22.698749999999997,4.497916666666663,1,22.698749999999997,65.50208333333333,0,40.89958333333334,4.497916666666663,1,40.89958333333334,65.50208333333333,0,59.10041666666667,4.497916666666663,1,59.10041666666667,65.50208333333333,0,77.30125000000001,4.497916666666663,1,77.30125000000001,65.50208333333333,0,95.50208333333333,4.497916666666663,1,95.50208333333333,65.50208333333333,186,0,4.497916666666668,4.497916666666663,1,4.497916666666668,65.50208333333333,0,8.138083333333332,4.497916666666663,1,8.138083333333332,65.50208333333333,0,11.778249999999998,4.497916666666663,1,11.778249999999998,65.50208333333333,0,15.418416666666667,4.497916666666663,1,15.418416666666667,65.50208333333333,0,19.058583333333328,4.497916666666663,1,19.058583333333328,65.50208333333333,0,22.698749999999997,4.497916666666663,1,22.698749999999997,65.50208333333333,0,22.698749999999997,4.497916666666663,1,22.698749999999997,65.50208333333333,0,26.338916666666666,4.497916666666663,1,26.338916666666666,65.50208333333333,0,29.97908333333333,4.497916666666663,1,29.97908333333333,65.50208333333333,0,33.619249999999994,4.497916666666663,1,33.619249999999994,65.50208333333333,0,37.25941666666666,4.497916666666663,1,37.25941666666666,65.50208333333333,0,40.89958333333333,4.497916666666663,1,40.89958333333333,65.50208333333333,0,40.89958333333334,4.497916666666663,1,40.89958333333334,65.50208333333333,0,44.539750000000005,4.497916666666663,1,44.539750000000005,65.50208333333333,0,48.179916666666664,4.497916666666663,1,48.179916666666664,65.50208333333333,0,51.82008333333333,4.497916666666663,1,51.82008333333333,65.50208333333333,0,55.460249999999995,4.497916666666663,1,55.460249999999995,65.50208333333333,0,59.10041666666667,4.497916666666663,1,59.10041666666667,65.50208333333333,0,59.10041666666667,4.497916666666663,1,59.10041666666667,65.50208333333333,0,62.740583333333326,4.497916666666663,1,62.740583333333326,65.50208333333333,0,66.38074999999999,4.497916666666663,1,66.38074999999999,65.50208333333333,0,70.02091666666666,4.497916666666663,1,70.02091666666666,65.50208333333333,0,73.66108333333334,4.497916666666663,1,73.66108333333334,65.50208333333333,0,77.30125,4.497916666666663,1,77.30125,65.50208333333333,0,77.30125000000001,4.497916666666663,1,77.30125000000001,65.50208333333333,0,80.94141666666668,4.497916666666663,1,80.94141666666668,65.50208333333333,0,84.58158333333333,4.497916666666663,1,84.58158333333333,65.50208333333333,0,88.22175,4.497916666666663,1,88.22175,65.50208333333333,0,91.86191666666667,4.497916666666663,1,91.86191666666667,65.50208333333333,0,95.50208333333332,4.497916666666663,1,95.50208333333332,65.50208333333333,0,95.50208333333333,4.497916666666663,1,95.50208333333333,65.50208333333333,15,0,4.497916666666668,59.40166666666667,1,4.497916666666668,51.26777777777777,1,44.944212962962965,51.26777777777777,1,44.944212962962965,59.40166666666667,1,4.497916666666668,59.40166666666667,15,0,4.497916666666668,39.06694444444444,1,4.497916666666668,30.93305555555555,1,48.17991666666668,30.93305555555555,1,48.17991666666668,39.06694444444444,1,4.497916666666668,39.06694444444444,15,0,4.497916666666668,18.732222222222223,1,4.497916666666668,10.598333333333334,1,95.50208333333335,10.598333333333334,1,95.50208333333335,18.732222222222223,1,4.497916666666668,18.732222222222223,15,0,44.944212962962965,59.40166666666667,1,44.944212962962965,51.26777777777777,1,95.50208333333333,51.26777777777777,1,95.50208333333333,59.40166666666667,1,44.944212962962965,59.40166666666667,15,0,48.179916666666664,39.06694444444444,1,48.179916666666664,30.93305555555555,1,95.50208333333333,30.93305555555555,1,95.50208333333333,39.06694444444444,1,48.179916666666664,39.06694444444444,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
		"horizontalBar3D": "15,0,9.000706597903596,61.945644014038095,1,95.22084608130814,61.945644014038095,1,95.22084608130814,3.9841081486467,1,9.000706597903596,3.9841081486467,0,9.000706597903596,61.945644014038095,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,63,0,9.249931782590238,4.233333333333345,1,9.249931782590238,62.194869198724746,1,4.529928734005227,65.76666666666667,0,23.619955029824325,4.233333333333345,1,23.619955029824325,62.194869198724746,1,18.89995198123931,65.76666666666667,0,37.98997827705841,4.233333333333345,1,37.98997827705841,62.194869198724746,1,33.2699752284734,65.76666666666667,0,52.36000152429251,4.233333333333345,1,52.36000152429251,62.194869198724746,1,47.6399984757075,65.76666666666667,0,66.73002477152659,4.233333333333345,1,66.73002477152659,62.194869198724746,1,62.01002172294159,65.76666666666667,0,81.10004801876069,4.233333333333345,1,81.10004801876069,62.194869198724746,1,76.38004497017567,65.76666666666667,0,95.47007126599479,4.233333333333345,1,95.47007126599479,62.194869198724746,1,90.75006821740975,65.76666666666667,333,0,9.249931782590238,4.233333333333345,1,9.249931782590238,62.194869198724746,1,4.529928734005227,65.76666666666667,0,12.123936432037054,4.233333333333345,1,12.123936432037054,62.194869198724746,1,7.403933383452044,65.76666666666667,0,14.99794108148387,4.233333333333345,1,14.99794108148387,62.194869198724746,1,10.27793803289886,65.76666666666667,0,17.87194573093069,4.233333333333345,1,17.87194573093069,62.194869198724746,1,13.151942682345686,65.76666666666667,0,20.745950380377508,4.233333333333345,1,20.745950380377508,62.194869198724746,1,16.0259473317925,65.76666666666667,0,23.619955029824325,4.233333333333345,1,23.619955029824325,62.194869198724746,1,18.89995198123931,65.76666666666667,0,23.619955029824325,4.233333333333345,1,23.619955029824325,62.194869198724746,1,18.89995198123931,65.76666666666667,0,26.493959679271146,4.233333333333345,1,26.493959679271146,62.194869198724746,1,21.773956630686136,65.76666666666667,0,29.367964328717964,4.233333333333345,1,29.367964328717964,62.194869198724746,1,24.64796128013295,65.76666666666667,0,32.24196897816478,4.233333333333345,1,32.24196897816478,62.194869198724746,1,27.52196592957977,65.76666666666667,0,35.115973627611595,4.233333333333345,1,35.115973627611595,62.194869198724746,1,30.395970579026585,65.76666666666667,0,37.98997827705841,4.233333333333345,1,37.98997827705841,62.194869198724746,1,33.2699752284734,65.76666666666667,0,37.98997827705841,4.233333333333345,1,37.98997827705841,62.194869198724746,1,33.2699752284734,65.76666666666667,0,40.86398292650523,4.233333333333345,1,40.86398292650523,62.194869198724746,1,36.14397987792023,65.76666666666667,0,43.737987575952054,4.233333333333345,1,43.737987575952054,62.194869198724746,1,39.01798452736705,65.76666666666667,0,46.611992225398886,4.233333333333345,1,46.611992225398886,62.194869198724746,1,41.89198917681386,65.76666666666667,0,49.48599687484568,4.233333333333345,1,49.48599687484568,62.194869198724746,1,44.76599382626067,65.76666666666667,0,52.36000152429251,4.233333333333345,1,52.36000152429251,62.194869198724746,1,47.6399984757075,65.76666666666667,0,52.36000152429251,4.233333333333345,1,52.36000152429251,62.194869198724746,1,47.6399984757075,65.76666666666667,0,55.23400617373933,4.233333333333345,1,55.23400617373933,62.194869198724746,1,50.514003125154325,65.76666666666667,0,58.10801082318615,4.233333333333345,1,58.10801082318615,62.194869198724746,1,53.388007774601135,65.76666666666667,0,60.982015472632966,4.233333333333345,1,60.982015472632966,62.194869198724746,1,56.26201242404796,65.76666666666667,0,63.85602012207978,4.233333333333345,1,63.85602012207978,62.194869198724746,1,59.13601707349478,65.76666666666667,0,66.7300247715266,4.233333333333345,1,66.7300247715266,62.194869198724746,1,62.010021722941595,65.76666666666667,0,66.73002477152659,4.233333333333345,1,66.73002477152659,62.194869198724746,1,62.01002172294159,65.76666666666667,0,69.60402942097339,4.233333333333345,1,69.60402942097339,62.194869198724746,1,64.88402637238839,65.76666666666667,0,72.47803407042025,4.233333333333345,1,72.47803407042025,62.194869198724746,1,67.75803102183522,65.76666666666667,0,75.35203871986705,4.233333333333345,1,75.35203871986705,62.194869198724746,1,70.63203567128205,65.76666666666667,0,78.22604336931389,4.233333333333345,1,78.22604336931389,62.194869198724746,1,73.50604032072886,65.76666666666667,0,81.10004801876067,4.233333333333345,1,81.10004801876067,62.194869198724746,1,76.38004497017565,65.76666666666667,0,81.10004801876069,4.233333333333345,1,81.10004801876069,62.194869198724746,1,76.38004497017567,65.76666666666667,0,83.9740526682075,4.233333333333345,1,83.9740526682075,62.194869198724746,1,79.2540496196225,65.76666666666667,0,86.84805731765434,4.233333333333345,1,86.84805731765434,62.194869198724746,1,82.12805426906931,65.76666666666667,0,89.72206196710114,4.233333333333345,1,89.72206196710114,62.194869198724746,1,85.00205891851613,65.76666666666667,0,92.59606661654796,4.233333333333345,1,92.59606661654796,62.194869198724746,1,87.87606356796294,65.76666666666667,0,95.47007126599479,4.233333333333345,1,95.47007126599479,62.194869198724746,1,90.75006821740975,65.76666666666667,0,95.47007126599479,4.233333333333345,1,95.47007126599479,62.194869198724746,1,90.75006821740975,65.76666666666667,15,0,4.529928734005227,65.76666666666667,1,4.529928734005227,7.805130801275273,1,9.249931782590238,4.233333333333345,1,9.249931782590238,62.194869198724746,1,4.529928734005227,65.76666666666667,15,0,4.529928734005227,65.76666666666667,1,9.249931782590238,62.194869198724746,1,95.47007126599479,62.194869198724746,1,90.75006821740975,65.76666666666667,1,4.529928734005227,65.76666666666667,15,0,9.249931782590238,62.194869198724746,1,9.249931782590238,4.233333333333345,1,95.47007126599479,4.233333333333345,1,95.47007126599479,62.194869198724746,1,9.249931782590238,62.194869198724746,15,0,5.945929648580728,55.03487144871886,1,5.945929648580728,60.55501772161327,1,63.426022637517086,60.55501772161327,1,63.426022637517086,55.03487144871886,1,5.945929648580728,55.03487144871886,15,0,5.945929648580728,55.03487144871886,1,7.833930868014729,53.60615246154208,1,65.3140238569511,53.60615246154208,1,63.426022637517086,55.03487144871886,1,5.945929648580728,55.03487144871886,15,0,5.945929648580728,55.03487144871886,1,5.945929648580728,60.55501772161327,1,7.833930868014729,59.1262987344365,1,7.833930868014729,53.60615246154208,1,5.945929648580728,55.03487144871886,15,0,63.426022637517086,55.03487144871886,1,63.426022637517086,60.55501772161327,1,65.3140238569511,59.1262987344365,1,65.3140238569511,53.60615246154208,1,63.426022637517086,55.03487144871886,15,0,5.945929648580728,60.55501772161327,1,7.833930868014729,59.1262987344365,1,65.3140238569511,59.1262987344365,1,63.426022637517086,60.55501772161327,1,5.945929648580728,60.55501772161327,15,0,7.833930868014729,53.60615246154208,1,7.833930868014729,59.1262987344365,1,65.3140238569511,59.1262987344365,1,65.3140238569511,53.60615246154208,1,7.833930868014729,53.60615246154208,15,0,5.945929648580728,35.7143594935884,1,5.945929648580728,41.234505766482805,1,74.92204123530438,41.234505766482805,1,74.92204123530438,35.7143594935884,1,5.945929648580728,35.7143594935884,15,0,5.945929648580728,35.7143594935884,1,7.833930868014729,34.285640506411625,1,76.81004245473838,34.285640506411625,1,74.92204123530438,35.7143594935884,1,5.945929648580728,35.7143594935884,15,0,5.945929648580728,35.7143594935884,1,5.945929648580728,41.234505766482805,1,7.833930868014729,39.80578677930604,1,7.833930868014729,34.285640506411625,1,5.945929648580728,35.7143594935884,15,0,74.92204123530438,35.7143594935884,1,74.92204123530438,41.234505766482805,1,76.81004245473838,39.80578677930604,1,76.81004245473838,34.285640506411625,1,74.92204123530438,35.7143594935884,15,0,5.945929648580728,41.234505766482805,1,7.833930868014729,39.80578677930604,1,76.81004245473838,39.80578677930604,1,74.92204123530438,41.234505766482805,1,5.945929648580728,41.234505766482805,15,0,7.833930868014729,34.285640506411625,1,7.833930868014729,39.80578677930604,1,76.81004245473838,39.80578677930604,1,76.81004245473838,34.285640506411625,1,7.833930868014729,34.285640506411625,15,0,5.945929648580728,16.393847538457923,1,5.945929648580728,21.913993811352345,1,86.41805983309163,21.913993811352345,1,86.41805983309163,16.393847538457923,1,5.945929648580728,16.393847538457923,15,0,5.945929648580728,16.393847538457923,1,7.833930868014729,14.965128551281156,1,88.30606105252564,14.965128551281156,1,86.41805983309163,16.393847538457923,1,5.945929648580728,16.393847538457923,15,0,5.945929648580728,16.393847538457923,1,5.945929648580728,21.913993811352345,1,7.833930868014729,20.485274824175576,1,7.833930868014729,14.965128551281156,1,5.945929648580728,16.393847538457923,15,0,86.41805983309163,16.393847538457923,1,86.41805983309163,21.913993811352345,1,88.30606105252564,20.485274824175576,1,88.30606105252564,14.965128551281156,1,86.41805983309163,16.393847538457923,15,0,5.945929648580728,21.913993811352345,1,7.833930868014729,20.485274824175576,1,88.30606105252564,20.485274824175576,1,86.41805983309163,21.913993811352345,1,5.945929648580728,21.913993811352345,15,0,7.833930868014729,14.965128551281156,1,7.833930868014729,20.485274824175576,1,88.30606105252564,20.485274824175576,1,88.30606105252564,14.965128551281156,1,7.833930868014729,14.965128551281156,15,0,5.945929648580728,49.514725175824445,1,5.945929648580728,55.03487144871886,1,77.79604588475118,55.03487144871886,1,77.79604588475118,49.514725175824445,1,5.945929648580728,49.514725175824445,15,0,5.945929648580728,49.514725175824445,1,7.833930868014729,48.08600618864767,1,79.68404710418518,48.08600618864767,1,77.79604588475118,49.514725175824445,1,5.945929648580728,49.514725175824445,15,0,5.945929648580728,49.514725175824445,1,5.945929648580728,55.03487144871886,1,7.833930868014729,53.60615246154208,1,7.833930868014729,48.08600618864767,1,5.945929648580728,49.514725175824445,15,0,77.79604588475118,49.514725175824445,1,77.79604588475118,55.03487144871886,1,79.68404710418518,53.60615246154208,1,79.68404710418518,48.08600618864767,1,77.79604588475118,49.514725175824445,15,0,5.945929648580728,55.03487144871886,1,7.833930868014729,53.60615246154208,1,79.68404710418518,53.60615246154208,1,77.79604588475118,55.03487144871886,1,5.945929648580728,55.03487144871886,15,0,7.833930868014729,48.08600618864767,1,7.833930868014729,53.60615246154208,1,79.68404710418518,53.60615246154208,1,79.68404710418518,48.08600618864767,1,7.833930868014729,48.08600618864767,15,0,5.945929648580728,30.19421322069398,1,5.945929648580728,35.7143594935884,1,80.670050534198,35.7143594935884,1,80.670050534198,30.19421322069398,1,5.945929648580728,30.19421322069398,15,0,5.945929648580728,30.19421322069398,1,7.833930868014729,28.765494233517202,1,82.55805175363201,28.765494233517202,1,80.670050534198,30.19421322069398,1,5.945929648580728,30.19421322069398,15,0,5.945929648580728,30.19421322069398,1,5.945929648580728,35.7143594935884,1,7.833930868014729,34.285640506411625,1,7.833930868014729,28.765494233517202,1,5.945929648580728,30.19421322069398,15,0,80.670050534198,30.19421322069398,1,80.670050534198,35.7143594935884,1,82.55805175363201,34.285640506411625,1,82.55805175363201,28.765494233517202,1,80.670050534198,30.19421322069398,15,0,5.945929648580728,35.7143594935884,1,7.833930868014729,34.285640506411625,1,82.55805175363201,34.285640506411625,1,80.670050534198,35.7143594935884,1,5.945929648580728,35.7143594935884,15,0,7.833930868014729,28.765494233517202,1,7.833930868014729,34.285640506411625,1,82.55805175363201,34.285640506411625,1,82.55805175363201,28.765494233517202,1,7.833930868014729,28.765494233517202,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
		"horizontalBarStacked3D": "15,0,10.853631793783668,60.636050838078226,1,95.11728565105432,60.636050838078226,1,95.11728565105432,3.98976350358385,1,10.853631793783668,3.98976350358385,0,10.853631793783668,60.636050838078226,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,54,0,11.097201623533147,4.233333333333337,1,11.097201623533147,60.879620667827716,1,4.639144519196221,65.76666666666667,0,27.949932394987275,4.233333333333337,1,27.949932394987275,60.879620667827716,1,21.491875290650352,65.76666666666667,0,44.8026631664414,4.233333333333337,1,44.8026631664414,60.879620667827716,1,38.34460606210448,65.76666666666667,0,61.655393937895525,4.233333333333337,1,61.655393937895525,60.879620667827716,1,55.197336833558595,65.76666666666667,0,78.50812470934963,4.233333333333337,1,78.50812470934963,60.879620667827716,1,72.05006760501273,65.76666666666667,0,95.36085548080376,4.233333333333337,1,95.36085548080376,60.879620667827716,1,88.90279837646686,65.76666666666667,279,0,11.097201623533147,4.233333333333337,1,11.097201623533147,60.879620667827716,1,4.639144519196221,65.76666666666667,0,14.467747777823972,4.233333333333337,1,14.467747777823972,60.879620667827716,1,8.009690673487047,65.76666666666667,0,17.8382939321148,4.233333333333337,1,17.8382939321148,60.879620667827716,1,11.380236827777873,65.76666666666667,0,21.20884008640562,4.233333333333337,1,21.20884008640562,60.879620667827716,1,14.750782982068692,65.76666666666667,0,24.57938624069645,4.233333333333337,1,24.57938624069645,60.879620667827716,1,18.121329136359524,65.76666666666667,0,27.94993239498727,4.233333333333337,1,27.94993239498727,60.879620667827716,1,21.491875290650345,65.76666666666667,0,27.949932394987275,4.233333333333337,1,27.949932394987275,60.879620667827716,1,21.491875290650352,65.76666666666667,0,31.320478549278103,4.233333333333337,1,31.320478549278103,60.879620667827716,1,24.86242144494118,65.76666666666667,0,34.691024703568935,4.233333333333337,1,34.691024703568935,60.879620667827716,1,28.23296759923201,65.76666666666667,0,38.06157085785975,4.233333333333337,1,38.06157085785975,60.879620667827716,1,31.603513753522826,65.76666666666667,0,41.432117012150584,4.233333333333337,1,41.432117012150584,60.879620667827716,1,34.974059907813654,65.76666666666667,0,44.80266316644141,4.233333333333337,1,44.80266316644141,60.879620667827716,1,38.34460606210449,65.76666666666667,0,44.8026631664414,4.233333333333337,1,44.8026631664414,60.879620667827716,1,38.34460606210448,65.76666666666667,0,48.17320932073223,4.233333333333337,1,48.17320932073223,60.879620667827716,1,41.7151522163953,65.76666666666667,0,51.54375547502306,4.233333333333337,1,51.54375547502306,60.879620667827716,1,45.08569837068613,65.76666666666667,0,54.91430162931387,4.233333333333337,1,54.91430162931387,60.879620667827716,1,48.456244524976945,65.76666666666667,0,58.2848477836047,4.233333333333337,1,58.2848477836047,60.879620667827716,1,51.82679067926777,65.76666666666667,0,61.65539393789552,4.233333333333337,1,61.65539393789552,60.879620667827716,1,55.19733683355859,65.76666666666667,0,61.655393937895525,4.233333333333337,1,61.655393937895525,60.879620667827716,1,55.197336833558595,65.76666666666667,0,65.02594009218635,4.233333333333337,1,65.02594009218635,60.879620667827716,1,58.56788298784943,65.76666666666667,0,68.39648624647718,4.233333333333337,1,68.39648624647718,60.879620667827716,1,61.93842914214026,65.76666666666667,0,71.76703240076799,4.233333333333337,1,71.76703240076799,60.879620667827716,1,65.30897529643107,65.76666666666667,0,75.1375785550588,4.233333333333337,1,75.1375785550588,60.879620667827716,1,68.67952145072188,65.76666666666667,0,78.50812470934963,4.233333333333337,1,78.50812470934963,60.879620667827716,1,72.05006760501273,65.76666666666667,0,78.50812470934963,4.233333333333337,1,78.50812470934963,60.879620667827716,1,72.05006760501273,65.76666666666667,0,81.87867086364048,4.233333333333337,1,81.87867086364048,60.879620667827716,1,75.42061375930354,65.76666666666667,0,85.24921701793131,4.233333333333337,1,85.24921701793131,60.879620667827716,1,78.79115991359438,65.76666666666667,0,88.61976317222211,4.233333333333337,1,88.61976317222211,60.879620667827716,1,82.16170606788522,65.76666666666667,0,91.99030932651293,4.233333333333337,1,91.99030932651293,60.879620667827716,1,85.53225222217603,65.76666666666667,0,95.36085548080376,4.233333333333337,1,95.36085548080376,60.879620667827716,1,88.90279837646683,65.76666666666667,0,95.36085548080376,4.233333333333337,1,95.36085548080376,60.879620667827716,1,88.90279837646686,65.76666666666667,15,0,4.639144519196221,65.76666666666667,1,4.639144519196221,9.120379332172286,1,11.097201623533147,4.233333333333337,1,11.097201623533147,60.879620667827716,1,4.639144519196221,65.76666666666667,15,0,4.639144519196221,65.76666666666667,1,11.097201623533147,60.879620667827716,1,95.36085548080376,60.879620667827716,1,88.90279837646686,65.76666666666667,1,4.639144519196221,65.76666666666667,15,0,11.097201623533147,60.879620667827716,1,11.097201623533147,4.233333333333337,1,95.36085548080376,4.233333333333337,1,95.36085548080376,60.879620667827716,1,11.097201623533147,60.879620667827716,15,0,6.576561650497303,51.08308582229963,1,6.576561650497303,58.635924133565545,1,40.28202319340555,58.635924133565545,1,40.28202319340555,51.08308582229963,1,6.576561650497303,51.08308582229963,15,0,6.576561650497303,51.08308582229963,1,9.159784492232072,49.12826742276405,1,42.86524603514032,49.12826742276405,1,40.28202319340555,51.08308582229963,1,6.576561650497303,51.08308582229963,15,0,6.576561650497303,51.08308582229963,1,6.576561650497303,58.635924133565545,1,9.159784492232072,56.68110573402997,1,9.159784492232072,49.12826742276405,1,6.576561650497303,51.08308582229963,15,0,40.28202319340555,51.08308582229963,1,40.28202319340555,58.635924133565545,1,42.86524603514032,56.68110573402997,1,42.86524603514032,49.12826742276405,1,40.28202319340555,51.08308582229963,15,0,6.576561650497303,58.635924133565545,1,9.159784492232072,56.68110573402997,1,42.86524603514032,56.68110573402997,1,40.28202319340555,58.635924133565545,1,6.576561650497303,58.635924133565545,15,0,9.159784492232072,49.12826742276405,1,9.159784492232072,56.68110573402997,1,42.86524603514032,56.68110573402997,1,42.86524603514032,49.12826742276405,1,9.159784492232072,49.12826742276405,15,0,6.576561650497303,32.20099004413484,1,6.576561650497303,39.75382835540075,1,47.0231155019872,39.75382835540075,1,47.0231155019872,32.20099004413484,1,6.576561650497303,32.20099004413484,15,0,6.576561650497303,32.20099004413484,1,9.159784492232072,30.24617164459926,1,49.606338343721966,30.24617164459926,1,47.0231155019872,32.20099004413484,1,6.576561650497303,32.20099004413484,15,0,6.576561650497303,32.20099004413484,1,6.576561650497303,39.75382835540075,1,9.159784492232072,37.79900995586517,1,9.159784492232072,30.24617164459926,1,6.576561650497303,32.20099004413484,15,0,47.0231155019872,32.20099004413484,1,47.0231155019872,39.75382835540075,1,49.606338343721966,37.79900995586517,1,49.606338343721966,30.24617164459926,1,47.0231155019872,32.20099004413484,15,0,6.576561650497303,39.75382835540075,1,9.159784492232072,37.79900995586517,1,49.606338343721966,37.79900995586517,1,47.0231155019872,39.75382835540075,1,6.576561650497303,39.75382835540075,15,0,9.159784492232072,30.24617164459926,1,9.159784492232072,37.79900995586517,1,49.606338343721966,37.79900995586517,1,49.606338343721966,30.24617164459926,1,9.159784492232072,30.24617164459926,15,0,6.576561650497303,13.31889426597004,1,6.576561650497303,20.87173257723596,1,53.76420781056885,20.87173257723596,1,53.76420781056885,13.31889426597004,1,6.576561650497303,13.31889426597004,15,0,6.576561650497303,13.31889426597004,1,9.159784492232072,11.36407586643446,1,56.347430652303615,11.36407586643446,1,53.76420781056885,13.31889426597004,1,6.576561650497303,13.31889426597004,15,0,6.576561650497303,13.31889426597004,1,6.576561650497303,20.87173257723596,1,9.159784492232072,18.916914177700384,1,9.159784492232072,11.36407586643446,1,6.576561650497303,13.31889426597004,15,0,53.76420781056885,13.31889426597004,1,53.76420781056885,20.87173257723596,1,56.347430652303615,18.916914177700384,1,56.347430652303615,11.36407586643446,1,53.76420781056885,13.31889426597004,15,0,6.576561650497303,20.87173257723596,1,9.159784492232072,18.916914177700384,1,56.347430652303615,18.916914177700384,1,53.76420781056885,20.87173257723596,1,6.576561650497303,20.87173257723596,15,0,9.159784492232072,11.36407586643446,1,9.159784492232072,18.916914177700384,1,56.347430652303615,18.916914177700384,1,56.347430652303615,11.36407586643446,1,9.159784492232072,11.36407586643446,15,0,40.28202319340555,51.08308582229963,1,40.28202319340555,58.635924133565545,1,82.41385012204087,58.635924133565545,1,82.41385012204087,51.08308582229963,1,40.28202319340555,51.08308582229963,15,0,40.28202319340555,51.08308582229963,1,42.86524603514032,49.12826742276405,1,84.99707296377564,49.12826742276405,1,82.41385012204087,51.08308582229963,1,40.28202319340555,51.08308582229963,15,0,40.28202319340555,51.08308582229963,1,40.28202319340555,58.635924133565545,1,42.86524603514032,56.68110573402997,1,42.86524603514032,49.12826742276405,1,40.28202319340555,51.08308582229963,15,0,82.41385012204087,51.08308582229963,1,82.41385012204087,58.635924133565545,1,84.99707296377564,56.68110573402997,1,84.99707296377564,49.12826742276405,1,82.41385012204087,51.08308582229963,15,0,40.28202319340555,58.635924133565545,1,42.86524603514032,56.68110573402997,1,84.99707296377564,56.68110573402997,1,82.41385012204087,58.635924133565545,1,40.28202319340555,58.635924133565545,15,0,42.86524603514032,49.12826742276405,1,42.86524603514032,56.68110573402997,1,84.99707296377564,56.68110573402997,1,84.99707296377564,49.12826742276405,1,42.86524603514032,49.12826742276405,15,0,47.0231155019872,32.20099004413484,1,47.0231155019872,39.75382835540075,1,90.84021550776795,39.75382835540075,1,90.84021550776795,32.20099004413484,1,47.0231155019872,32.20099004413484,15,0,47.0231155019872,32.20099004413484,1,49.606338343721966,30.24617164459926,1,93.4234383495027,30.24617164459926,1,90.84021550776795,32.20099004413484,1,47.0231155019872,32.20099004413484,15,0,47.0231155019872,32.20099004413484,1,47.0231155019872,39.75382835540075,1,49.606338343721966,37.79900995586517,1,49.606338343721966,30.24617164459926,1,47.0231155019872,32.20099004413484,15,0,90.84021550776795,32.20099004413484,1,90.84021550776795,39.75382835540075,1,93.4234383495027,37.79900995586517,1,93.4234383495027,30.24617164459926,1,90.84021550776795,32.20099004413484,15,0,47.0231155019872,39.75382835540075,1,49.606338343721966,37.79900995586517,1,93.4234383495027,37.79900995586517,1,90.84021550776795,39.75382835540075,1,47.0231155019872,39.75382835540075,15,0,49.606338343721966,30.24617164459926,1,49.606338343721966,37.79900995586517,1,93.4234383495027,37.79900995586517,1,93.4234383495027,30.24617164459926,1,49.606338343721966,30.24617164459926,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
		"horizontalBarStackedPercent3D": "15,0,10.853631793783668,60.636050838078226,1,95.11728565105432,60.636050838078226,1,95.11728565105432,3.98976350358385,1,10.853631793783668,3.98976350358385,0,10.853631793783668,60.636050838078226,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,54,0,11.097201623533147,4.233333333333337,1,11.097201623533147,60.879620667827716,1,4.639144519196221,65.76666666666667,0,27.949932394987275,4.233333333333337,1,27.949932394987275,60.879620667827716,1,21.491875290650352,65.76666666666667,0,44.8026631664414,4.233333333333337,1,44.8026631664414,60.879620667827716,1,38.34460606210448,65.76666666666667,0,61.655393937895525,4.233333333333337,1,61.655393937895525,60.879620667827716,1,55.197336833558595,65.76666666666667,0,78.50812470934963,4.233333333333337,1,78.50812470934963,60.879620667827716,1,72.05006760501273,65.76666666666667,0,95.36085548080376,4.233333333333337,1,95.36085548080376,60.879620667827716,1,88.90279837646686,65.76666666666667,279,0,11.097201623533147,4.233333333333337,1,11.097201623533147,60.879620667827716,1,4.639144519196221,65.76666666666667,0,14.467747777823972,4.233333333333337,1,14.467747777823972,60.879620667827716,1,8.009690673487047,65.76666666666667,0,17.8382939321148,4.233333333333337,1,17.8382939321148,60.879620667827716,1,11.380236827777873,65.76666666666667,0,21.20884008640562,4.233333333333337,1,21.20884008640562,60.879620667827716,1,14.750782982068692,65.76666666666667,0,24.57938624069645,4.233333333333337,1,24.57938624069645,60.879620667827716,1,18.121329136359524,65.76666666666667,0,27.94993239498727,4.233333333333337,1,27.94993239498727,60.879620667827716,1,21.491875290650345,65.76666666666667,0,27.949932394987275,4.233333333333337,1,27.949932394987275,60.879620667827716,1,21.491875290650352,65.76666666666667,0,31.320478549278103,4.233333333333337,1,31.320478549278103,60.879620667827716,1,24.86242144494118,65.76666666666667,0,34.691024703568935,4.233333333333337,1,34.691024703568935,60.879620667827716,1,28.23296759923201,65.76666666666667,0,38.06157085785975,4.233333333333337,1,38.06157085785975,60.879620667827716,1,31.603513753522826,65.76666666666667,0,41.432117012150584,4.233333333333337,1,41.432117012150584,60.879620667827716,1,34.974059907813654,65.76666666666667,0,44.80266316644141,4.233333333333337,1,44.80266316644141,60.879620667827716,1,38.34460606210449,65.76666666666667,0,44.8026631664414,4.233333333333337,1,44.8026631664414,60.879620667827716,1,38.34460606210448,65.76666666666667,0,48.17320932073223,4.233333333333337,1,48.17320932073223,60.879620667827716,1,41.7151522163953,65.76666666666667,0,51.54375547502306,4.233333333333337,1,51.54375547502306,60.879620667827716,1,45.08569837068613,65.76666666666667,0,54.91430162931387,4.233333333333337,1,54.91430162931387,60.879620667827716,1,48.456244524976945,65.76666666666667,0,58.2848477836047,4.233333333333337,1,58.2848477836047,60.879620667827716,1,51.82679067926777,65.76666666666667,0,61.65539393789552,4.233333333333337,1,61.65539393789552,60.879620667827716,1,55.19733683355859,65.76666666666667,0,61.655393937895525,4.233333333333337,1,61.655393937895525,60.879620667827716,1,55.197336833558595,65.76666666666667,0,65.02594009218635,4.233333333333337,1,65.02594009218635,60.879620667827716,1,58.56788298784943,65.76666666666667,0,68.39648624647718,4.233333333333337,1,68.39648624647718,60.879620667827716,1,61.93842914214026,65.76666666666667,0,71.76703240076799,4.233333333333337,1,71.76703240076799,60.879620667827716,1,65.30897529643107,65.76666666666667,0,75.1375785550588,4.233333333333337,1,75.1375785550588,60.879620667827716,1,68.67952145072188,65.76666666666667,0,78.50812470934963,4.233333333333337,1,78.50812470934963,60.879620667827716,1,72.05006760501273,65.76666666666667,0,78.50812470934963,4.233333333333337,1,78.50812470934963,60.879620667827716,1,72.05006760501273,65.76666666666667,0,81.87867086364048,4.233333333333337,1,81.87867086364048,60.879620667827716,1,75.42061375930354,65.76666666666667,0,85.24921701793131,4.233333333333337,1,85.24921701793131,60.879620667827716,1,78.79115991359438,65.76666666666667,0,88.61976317222211,4.233333333333337,1,88.61976317222211,60.879620667827716,1,82.16170606788522,65.76666666666667,0,91.99030932651293,4.233333333333337,1,91.99030932651293,60.879620667827716,1,85.53225222217603,65.76666666666667,0,95.36085548080376,4.233333333333337,1,95.36085548080376,60.879620667827716,1,88.90279837646683,65.76666666666667,0,95.36085548080376,4.233333333333337,1,95.36085548080376,60.879620667827716,1,88.90279837646686,65.76666666666667,15,0,4.639144519196221,65.76666666666667,1,4.639144519196221,9.120379332172286,1,11.097201623533147,4.233333333333337,1,11.097201623533147,60.879620667827716,1,4.639144519196221,65.76666666666667,15,0,4.639144519196221,65.76666666666667,1,11.097201623533147,60.879620667827716,1,95.36085548080376,60.879620667827716,1,88.90279837646686,65.76666666666667,1,4.639144519196221,65.76666666666667,15,0,11.097201623533147,60.879620667827716,1,11.097201623533147,4.233333333333337,1,95.36085548080376,4.233333333333337,1,95.36085548080376,60.879620667827716,1,11.097201623533147,60.879620667827716,15,0,6.576561650497303,51.08308582229963,1,6.576561650497303,58.635924133565545,1,44.02707447595092,58.635924133565545,1,44.02707447595092,51.08308582229963,1,6.576561650497303,51.08308582229963,15,0,6.576561650497303,51.08308582229963,1,9.159784492232072,49.12826742276405,1,46.61029731768568,49.12826742276405,1,44.02707447595092,51.08308582229963,1,6.576561650497303,51.08308582229963,15,0,6.576561650497303,51.08308582229963,1,6.576561650497303,58.635924133565545,1,9.159784492232072,56.68110573402997,1,9.159784492232072,49.12826742276405,1,6.576561650497303,51.08308582229963,15,0,44.02707447595092,51.08308582229963,1,44.02707447595092,58.635924133565545,1,46.61029731768568,56.68110573402997,1,46.61029731768568,49.12826742276405,1,44.02707447595092,51.08308582229963,15,0,6.576561650497303,58.635924133565545,1,9.159784492232072,56.68110573402997,1,46.61029731768568,56.68110573402997,1,44.02707447595092,58.635924133565545,1,6.576561650497303,58.635924133565545,15,0,9.159784492232072,49.12826742276405,1,9.159784492232072,56.68110573402997,1,46.61029731768568,56.68110573402997,1,46.61029731768568,49.12826742276405,1,9.159784492232072,49.12826742276405,15,0,6.576561650497303,32.20099004413484,1,6.576561650497303,39.75382835540075,1,47.0231155019872,39.75382835540075,1,47.0231155019872,32.20099004413484,1,6.576561650497303,32.20099004413484,15,0,6.576561650497303,32.20099004413484,1,9.159784492232072,30.24617164459926,1,49.606338343721966,30.24617164459926,1,47.0231155019872,32.20099004413484,1,6.576561650497303,32.20099004413484,15,0,6.576561650497303,32.20099004413484,1,6.576561650497303,39.75382835540075,1,9.159784492232072,37.79900995586517,1,9.159784492232072,30.24617164459926,1,6.576561650497303,32.20099004413484,15,0,47.0231155019872,32.20099004413484,1,47.0231155019872,39.75382835540075,1,49.606338343721966,37.79900995586517,1,49.606338343721966,30.24617164459926,1,47.0231155019872,32.20099004413484,15,0,6.576561650497303,39.75382835540075,1,9.159784492232072,37.79900995586517,1,49.606338343721966,37.79900995586517,1,47.0231155019872,39.75382835540075,1,6.576561650497303,39.75382835540075,15,0,9.159784492232072,30.24617164459926,1,9.159784492232072,37.79900995586517,1,49.606338343721966,37.79900995586517,1,49.606338343721966,30.24617164459926,1,9.159784492232072,30.24617164459926,15,0,6.576561650497303,13.31889426597004,1,6.576561650497303,20.87173257723596,1,90.84021550776795,20.87173257723596,1,90.84021550776795,13.31889426597004,1,6.576561650497303,13.31889426597004,15,0,6.576561650497303,13.31889426597004,1,9.159784492232072,11.36407586643446,1,93.4234383495027,11.36407586643446,1,90.84021550776795,13.31889426597004,1,6.576561650497303,13.31889426597004,15,0,6.576561650497303,13.31889426597004,1,6.576561650497303,20.87173257723596,1,9.159784492232072,18.916914177700384,1,9.159784492232072,11.36407586643446,1,6.576561650497303,13.31889426597004,15,0,90.84021550776795,13.31889426597004,1,90.84021550776795,20.87173257723596,1,93.4234383495027,18.916914177700384,1,93.4234383495027,11.36407586643446,1,90.84021550776795,13.31889426597004,15,0,6.576561650497303,20.87173257723596,1,9.159784492232072,18.916914177700384,1,93.4234383495027,18.916914177700384,1,90.84021550776795,20.87173257723596,1,6.576561650497303,20.87173257723596,15,0,9.159784492232072,11.36407586643446,1,9.159784492232072,18.916914177700384,1,93.4234383495027,18.916914177700384,1,93.4234383495027,11.36407586643446,1,9.159784492232072,11.36407586643446,15,0,44.02707447595092,51.08308582229963,1,44.02707447595092,58.635924133565545,1,90.84021550776795,58.635924133565545,1,90.84021550776795,51.08308582229963,1,44.02707447595092,51.08308582229963,15,0,44.02707447595092,51.08308582229963,1,46.61029731768568,49.12826742276405,1,93.4234383495027,49.12826742276405,1,90.84021550776795,51.08308582229963,1,44.02707447595092,51.08308582229963,15,0,44.02707447595092,51.08308582229963,1,44.02707447595092,58.635924133565545,1,46.61029731768568,56.68110573402997,1,46.61029731768568,49.12826742276405,1,44.02707447595092,51.08308582229963,15,0,90.84021550776795,51.08308582229963,1,90.84021550776795,58.635924133565545,1,93.4234383495027,56.68110573402997,1,93.4234383495027,49.12826742276405,1,90.84021550776795,51.08308582229963,15,0,44.02707447595092,58.635924133565545,1,46.61029731768568,56.68110573402997,1,93.4234383495027,56.68110573402997,1,90.84021550776795,58.635924133565545,1,44.02707447595092,58.635924133565545,15,0,46.61029731768568,49.12826742276405,1,46.61029731768568,56.68110573402997,1,93.4234383495027,56.68110573402997,1,93.4234383495027,49.12826742276405,1,46.61029731768568,49.12826742276405,15,0,47.0231155019872,32.20099004413484,1,47.0231155019872,39.75382835540075,1,90.84021550776795,39.75382835540075,1,90.84021550776795,32.20099004413484,1,47.0231155019872,32.20099004413484,15,0,47.0231155019872,32.20099004413484,1,49.606338343721966,30.24617164459926,1,93.4234383495027,30.24617164459926,1,90.84021550776795,32.20099004413484,1,47.0231155019872,32.20099004413484,15,0,47.0231155019872,32.20099004413484,1,47.0231155019872,39.75382835540075,1,49.606338343721966,37.79900995586517,1,49.606338343721966,30.24617164459926,1,47.0231155019872,32.20099004413484,15,0,90.84021550776795,32.20099004413484,1,90.84021550776795,39.75382835540075,1,93.4234383495027,37.79900995586517,1,93.4234383495027,30.24617164459926,1,90.84021550776795,32.20099004413484,15,0,47.0231155019872,39.75382835540075,1,49.606338343721966,37.79900995586517,1,93.4234383495027,37.79900995586517,1,90.84021550776795,39.75382835540075,1,47.0231155019872,39.75382835540075,15,0,49.606338343721966,30.24617164459926,1,49.606338343721966,37.79900995586517,1,93.4234383495027,37.79900995586517,1,93.4234383495027,30.24617164459926,1,49.606338343721966,30.24617164459926,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
		"lineNormal": "15,0,4.233333333333333,65.2375,1,95.2375,65.2375,1,95.2375,4.233333333333336,1,4.233333333333333,4.233333333333336,1,4.233333333333333,65.2375,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,42,0,4.497916666666668,65.50208333333333,1,95.50208333333332,65.50208333333333,0,4.497916666666668,55.334722222222226,1,95.50208333333332,55.334722222222226,0,4.497916666666668,45.16736111111111,1,95.50208333333332,45.16736111111111,0,4.497916666666668,35,1,95.50208333333332,35,0,4.497916666666668,24.832638888888887,1,95.50208333333332,24.832638888888887,0,4.497916666666668,14.665277777777776,1,95.50208333333332,14.665277777777776,0,4.497916666666668,4.4979166666666694,1,95.50208333333332,4.4979166666666694,186,0,4.497916666666668,65.50208333333333,1,95.50208333333332,65.50208333333333,0,4.497916666666668,55.334722222222226,1,95.50208333333332,55.334722222222226,0,4.497916666666668,57.36819444444445,1,95.50208333333332,57.36819444444445,0,4.497916666666668,59.40166666666668,1,95.50208333333332,59.40166666666668,0,4.497916666666668,61.43513888888889,1,95.50208333333332,61.43513888888889,0,4.497916666666668,63.46861111111111,1,95.50208333333332,63.46861111111111,0,4.497916666666668,45.16736111111111,1,95.50208333333332,45.16736111111111,0,4.497916666666668,47.20083333333333,1,95.50208333333332,47.20083333333333,0,4.497916666666668,49.23430555555555,1,95.50208333333332,49.23430555555555,0,4.497916666666668,51.26777777777777,1,95.50208333333332,51.26777777777777,0,4.497916666666668,53.301249999999996,1,95.50208333333332,53.301249999999996,0,4.497916666666668,35,1,95.50208333333332,35,0,4.497916666666668,37.033472222222215,1,95.50208333333332,37.033472222222215,0,4.497916666666668,39.066944444444445,1,95.50208333333332,39.066944444444445,0,4.497916666666668,41.10041666666667,1,95.50208333333332,41.10041666666667,0,4.497916666666668,43.13388888888889,1,95.50208333333332,43.13388888888889,0,4.497916666666668,24.832638888888887,1,95.50208333333332,24.832638888888887,0,4.497916666666668,26.866111111111113,1,95.50208333333332,26.866111111111113,0,4.497916666666668,28.899583333333332,1,95.50208333333332,28.899583333333332,0,4.497916666666668,30.933055555555555,1,95.50208333333332,30.933055555555555,0,4.497916666666668,32.96652777777778,1,95.50208333333332,32.96652777777778,0,4.497916666666668,14.665277777777776,1,95.50208333333332,14.665277777777776,0,4.497916666666668,16.698749999999997,1,95.50208333333332,16.698749999999997,0,4.497916666666668,18.73222222222222,1,95.50208333333332,18.73222222222222,0,4.497916666666668,20.765694444444446,1,95.50208333333332,20.765694444444446,0,4.497916666666668,22.79916666666666,1,95.50208333333332,22.79916666666666,0,4.497916666666668,4.4979166666666694,1,95.50208333333332,4.4979166666666694,0,4.497916666666668,6.53138888888889,1,95.50208333333332,6.53138888888889,0,4.497916666666668,8.564861111111114,1,95.50208333333332,8.564861111111114,0,4.497916666666668,10.598333333333336,1,95.50208333333332,10.598333333333336,0,4.497916666666668,12.63180555555556,1,95.50208333333332,12.63180555555556,3,0,19.66527777777778,24.832638888888887,3,0,50,16.698749999999997,3,0,80.33472222222223,8.56486111111111,3,0,19.66527777777778,14.665277777777776,3,0,50,12.631805555555554,6,0,19.66527777777778,24.832638888888887,1,50,16.698749999999997,6,0,50,16.698749999999997,1,80.33472222222223,8.56486111111111,6,0,19.66527777777778,14.665277777777776,1,50,12.631805555555554,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
		"lineStacked": "15,0,4.233333333333333,65.2375,1,95.2375,65.2375,1,95.2375,4.233333333333336,1,4.233333333333333,4.233333333333336,1,4.233333333333333,65.2375,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,42,0,4.497916666666668,65.50208333333333,1,95.50208333333332,65.50208333333333,0,4.497916666666668,55.334722222222226,1,95.50208333333332,55.334722222222226,0,4.497916666666668,45.16736111111111,1,95.50208333333332,45.16736111111111,0,4.497916666666668,35,1,95.50208333333332,35,0,4.497916666666668,24.832638888888887,1,95.50208333333332,24.832638888888887,0,4.497916666666668,14.665277777777776,1,95.50208333333332,14.665277777777776,0,4.497916666666668,4.4979166666666694,1,95.50208333333332,4.4979166666666694,186,0,4.497916666666668,65.50208333333333,1,95.50208333333332,65.50208333333333,0,4.497916666666668,55.334722222222226,1,95.50208333333332,55.334722222222226,0,4.497916666666668,57.36819444444445,1,95.50208333333332,57.36819444444445,0,4.497916666666668,59.40166666666668,1,95.50208333333332,59.40166666666668,0,4.497916666666668,61.43513888888889,1,95.50208333333332,61.43513888888889,0,4.497916666666668,63.46861111111111,1,95.50208333333332,63.46861111111111,0,4.497916666666668,45.16736111111111,1,95.50208333333332,45.16736111111111,0,4.497916666666668,47.20083333333333,1,95.50208333333332,47.20083333333333,0,4.497916666666668,49.23430555555555,1,95.50208333333332,49.23430555555555,0,4.497916666666668,51.26777777777777,1,95.50208333333332,51.26777777777777,0,4.497916666666668,53.301249999999996,1,95.50208333333332,53.301249999999996,0,4.497916666666668,35,1,95.50208333333332,35,0,4.497916666666668,37.033472222222215,1,95.50208333333332,37.033472222222215,0,4.497916666666668,39.066944444444445,1,95.50208333333332,39.066944444444445,0,4.497916666666668,41.10041666666667,1,95.50208333333332,41.10041666666667,0,4.497916666666668,43.13388888888889,1,95.50208333333332,43.13388888888889,0,4.497916666666668,24.832638888888887,1,95.50208333333332,24.832638888888887,0,4.497916666666668,26.866111111111113,1,95.50208333333332,26.866111111111113,0,4.497916666666668,28.899583333333332,1,95.50208333333332,28.899583333333332,0,4.497916666666668,30.933055555555555,1,95.50208333333332,30.933055555555555,0,4.497916666666668,32.96652777777778,1,95.50208333333332,32.96652777777778,0,4.497916666666668,14.665277777777776,1,95.50208333333332,14.665277777777776,0,4.497916666666668,16.698749999999997,1,95.50208333333332,16.698749999999997,0,4.497916666666668,18.73222222222222,1,95.50208333333332,18.73222222222222,0,4.497916666666668,20.765694444444446,1,95.50208333333332,20.765694444444446,0,4.497916666666668,22.79916666666666,1,95.50208333333332,22.79916666666666,0,4.497916666666668,4.4979166666666694,1,95.50208333333332,4.4979166666666694,0,4.497916666666668,6.53138888888889,1,95.50208333333332,6.53138888888889,0,4.497916666666668,8.564861111111114,1,95.50208333333332,8.564861111111114,0,4.497916666666668,10.598333333333336,1,95.50208333333332,10.598333333333336,0,4.497916666666668,12.63180555555556,1,95.50208333333332,12.63180555555556,3,0,19.66527777777778,45.16736111111111,3,0,50,41.10041666666667,3,0,80.33472222222223,37.03347222222222,3,0,19.66527777777778,19.748958333333334,3,0,50,14.665277777777776,3,0,80.33472222222223,37.03347222222222,6,0,19.66527777777778,45.16736111111111,1,50,41.10041666666667,6,0,50,41.10041666666667,1,80.33472222222223,37.03347222222222,6,0,19.66527777777778,19.748958333333334,1,50,14.665277777777776,6,0,50,14.665277777777776,1,80.33472222222223,37.03347222222222,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
		"lineStackedPercent": "15,0,4.233333333333333,65.2375,1,95.2375,65.2375,1,95.2375,4.233333333333336,1,4.233333333333333,4.233333333333336,1,4.233333333333333,65.2375,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,66,0,4.497916666666668,65.50208333333333,1,95.50208333333332,65.50208333333333,0,4.497916666666668,59.40166666666667,1,95.50208333333332,59.40166666666667,0,4.497916666666668,53.301249999999996,1,95.50208333333332,53.301249999999996,0,4.497916666666668,47.200833333333335,1,95.50208333333332,47.200833333333335,0,4.497916666666668,41.10041666666667,1,95.50208333333332,41.10041666666667,0,4.497916666666668,35,1,95.50208333333332,35,0,4.497916666666668,28.899583333333343,1,95.50208333333332,28.899583333333343,0,4.497916666666668,22.79916666666667,1,95.50208333333332,22.79916666666667,0,4.497916666666668,16.698750000000004,1,95.50208333333332,16.698750000000004,0,4.497916666666668,10.598333333333336,1,95.50208333333332,10.598333333333336,0,4.497916666666668,4.4979166666666694,1,95.50208333333332,4.4979166666666694,306,0,4.497916666666668,65.50208333333333,1,95.50208333333332,65.50208333333333,0,4.497916666666668,59.40166666666667,1,95.50208333333332,59.40166666666667,0,4.497916666666668,60.621750000000006,1,95.50208333333332,60.621750000000006,0,4.497916666666668,61.841833333333334,1,95.50208333333332,61.841833333333334,0,4.497916666666668,63.06191666666667,1,95.50208333333332,63.06191666666667,0,4.497916666666668,64.28200000000001,1,95.50208333333332,64.28200000000001,0,4.497916666666668,53.301249999999996,1,95.50208333333332,53.301249999999996,0,4.497916666666668,54.52133333333333,1,95.50208333333332,54.52133333333333,0,4.497916666666668,55.74141666666666,1,95.50208333333332,55.74141666666666,0,4.497916666666668,56.961499999999994,1,95.50208333333332,56.961499999999994,0,4.497916666666668,58.18158333333333,1,95.50208333333332,58.18158333333333,0,4.497916666666668,47.200833333333335,1,95.50208333333332,47.200833333333335,0,4.497916666666668,48.42091666666668,1,95.50208333333332,48.42091666666668,0,4.497916666666668,49.641000000000005,1,95.50208333333332,49.641000000000005,0,4.497916666666668,50.86108333333334,1,95.50208333333332,50.86108333333334,0,4.497916666666668,52.081166666666675,1,95.50208333333332,52.081166666666675,0,4.497916666666668,41.10041666666667,1,95.50208333333332,41.10041666666667,0,4.497916666666668,42.3205,1,95.50208333333332,42.3205,0,4.497916666666668,43.54058333333333,1,95.50208333333332,43.54058333333333,0,4.497916666666668,44.760666666666665,1,95.50208333333332,44.760666666666665,0,4.497916666666668,45.98075,1,95.50208333333332,45.98075,0,4.497916666666668,35,1,95.50208333333332,35,0,4.497916666666668,36.220083333333335,1,95.50208333333332,36.220083333333335,0,4.497916666666668,37.44016666666667,1,95.50208333333332,37.44016666666667,0,4.497916666666668,38.660250000000005,1,95.50208333333332,38.660250000000005,0,4.497916666666668,39.88033333333334,1,95.50208333333332,39.88033333333334,0,4.497916666666668,28.899583333333343,1,95.50208333333332,28.899583333333343,0,4.497916666666668,30.119666666666674,1,95.50208333333332,30.119666666666674,0,4.497916666666668,31.339750000000006,1,95.50208333333332,31.339750000000006,0,4.497916666666668,32.55983333333334,1,95.50208333333332,32.55983333333334,0,4.497916666666668,33.77991666666667,1,95.50208333333332,33.77991666666667,0,4.497916666666668,22.79916666666667,1,95.50208333333332,22.79916666666667,0,4.497916666666668,24.019250000000007,1,95.50208333333332,24.019250000000007,0,4.497916666666668,25.239333333333338,1,95.50208333333332,25.239333333333338,0,4.497916666666668,26.459416666666673,1,95.50208333333332,26.459416666666673,0,4.497916666666668,27.679500000000004,1,95.50208333333332,27.679500000000004,0,4.497916666666668,16.698750000000004,1,95.50208333333332,16.698750000000004,0,4.497916666666668,17.918833333333342,1,95.50208333333332,17.918833333333342,0,4.497916666666668,19.138916666666674,1,95.50208333333332,19.138916666666674,0,4.497916666666668,20.359000000000005,1,95.50208333333332,20.359000000000005,0,4.497916666666668,21.579083333333337,1,95.50208333333332,21.579083333333337,0,4.497916666666668,10.598333333333336,1,95.50208333333332,10.598333333333336,0,4.497916666666668,11.818416666666671,1,95.50208333333332,11.818416666666671,0,4.497916666666668,13.038500000000004,1,95.50208333333332,13.038500000000004,0,4.497916666666668,14.25858333333334,1,95.50208333333332,14.25858333333334,0,4.497916666666668,15.47866666666667,1,95.50208333333332,15.47866666666667,0,4.497916666666668,4.4979166666666694,1,95.50208333333332,4.4979166666666694,0,4.497916666666668,5.7180000000000035,1,95.50208333333332,5.7180000000000035,0,4.497916666666668,6.938083333333337,1,95.50208333333332,6.938083333333337,0,4.497916666666668,8.158166666666668,1,95.50208333333332,8.158166666666668,0,4.497916666666668,9.378250000000003,1,95.50208333333332,9.378250000000003,3,0,19.66527777777778,38.38912037037037,3,0,50,36.220083333333335,3,0,80.33472222222223,4.4979166666666694,3,0,19.66527777777778,4.4979166666666694,3,0,50,4.4979166666666694,3,0,80.33472222222223,4.4979166666666694,6,0,19.66527777777778,38.38912037037037,1,50,36.220083333333335,6,0,50,36.220083333333335,1,80.33472222222223,4.4979166666666694,6,0,19.66527777777778,4.4979166666666694,1,50,4.4979166666666694,6,0,50,4.4979166666666694,1,80.33472222222223,4.4979166666666694,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
		"line3D": "15,0,21.013480335383846,45.12844427176431,1,95.55121028230624,45.12844427176431,1,95.55121028230624,11.723091156440482,1,21.013480335383846,11.723091156440482,0,21.013480335383846,45.12844427176431,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,63,0,4.233333333333333,58.13327125398591,1,21.22893671974426,45.27208186133791,1,95.76666666666668,45.27208186133791,0,4.233333333333333,52.56571240143195,1,21.22893671974426,39.70452300878394,1,95.76666666666668,39.70452300878394,0,4.233333333333333,46.99815354887799,1,21.22893671974426,34.13696415622997,1,95.76666666666668,34.13696415622997,0,4.233333333333333,41.430594696324015,1,21.22893671974426,28.569405303675996,1,95.76666666666668,28.569405303675996,0,4.233333333333333,35.86303584377004,1,21.22893671974426,23.00184645112203,1,95.76666666666668,23.00184645112203,0,4.233333333333333,30.295476991216074,1,21.22893671974426,17.434287598568062,1,95.76666666666668,17.434287598568062,0,4.233333333333333,24.72791813866211,1,21.22893671974426,11.866728746014084,1,95.76666666666668,11.866728746014084,279,0,4.233333333333333,58.13327125398591,1,21.22893671974426,45.27208186133791,1,95.76666666666668,45.27208186133791,0,4.233333333333333,52.56571240143195,1,21.22893671974426,39.70452300878394,1,95.76666666666668,39.70452300878394,0,4.233333333333333,53.679224171942735,1,21.22893671974426,40.818034779294734,1,95.76666666666668,40.818034779294734,0,4.233333333333333,54.79273594245353,1,21.22893671974426,41.93154654980553,1,95.76666666666668,41.93154654980553,0,4.233333333333333,55.90624771296434,1,21.22893671974426,43.045058320316315,1,95.76666666666668,43.045058320316315,0,4.233333333333333,57.01975948347513,1,21.22893671974426,44.15857009082711,1,95.76666666666668,44.15857009082711,0,4.233333333333333,46.99815354887799,1,21.22893671974426,34.13696415622997,1,95.76666666666668,34.13696415622997,0,4.233333333333333,48.11166531938878,1,21.22893671974426,35.25047592674076,1,95.76666666666668,35.25047592674076,0,4.233333333333333,49.22517708989957,1,21.22893671974426,36.36398769725155,1,95.76666666666668,36.36398769725155,0,4.233333333333333,50.33868886041036,1,21.22893671974426,37.47749946776236,1,95.76666666666668,37.47749946776236,0,4.233333333333333,51.452200630921155,1,21.22893671974426,38.59101123827314,1,95.76666666666668,38.59101123827314,0,4.233333333333333,41.430594696324015,1,21.22893671974426,28.569405303675996,1,95.76666666666668,28.569405303675996,0,4.233333333333333,42.544106466834805,1,21.22893671974426,29.68291707418679,1,95.76666666666668,29.68291707418679,0,4.233333333333333,43.6576182373456,1,21.22893671974426,30.796428844697584,1,95.76666666666668,30.796428844697584,0,4.233333333333333,44.771130007856385,1,21.22893671974426,31.909940615208377,1,95.76666666666668,31.909940615208377,0,4.233333333333333,45.884641778367175,1,21.22893671974426,33.02345238571917,1,95.76666666666668,33.02345238571917,0,4.233333333333333,35.86303584377004,1,21.22893671974426,23.00184645112203,1,95.76666666666668,23.00184645112203,0,4.233333333333333,36.97654761428084,1,21.22893671974426,24.11535822163282,1,95.76666666666668,24.11535822163282,0,4.233333333333333,38.09005938479163,1,21.22893671974426,25.22886999214362,1,95.76666666666668,25.22886999214362,0,4.233333333333333,39.203571155302434,1,21.22893671974426,26.34238176265441,1,95.76666666666668,26.34238176265441,0,4.233333333333333,40.31708292581322,1,21.22893671974426,27.455893533165206,1,95.76666666666668,27.455893533165206,0,4.233333333333333,30.295476991216074,1,21.22893671974426,17.434287598568062,1,95.76666666666668,17.434287598568062,0,4.233333333333333,31.408988761726867,1,21.22893671974426,18.54779936907886,1,95.76666666666668,18.54779936907886,0,4.233333333333333,32.522500532237665,1,21.22893671974426,19.66131113958965,1,95.76666666666668,19.66131113958965,0,4.233333333333333,33.63601230274846,1,21.22893671974426,20.77482291010045,1,95.76666666666668,20.77482291010045,0,4.233333333333333,34.74952407325926,1,21.22893671974426,21.888334680611234,1,95.76666666666668,21.888334680611234,0,4.233333333333333,24.72791813866211,1,21.22893671974426,11.866728746014084,1,95.76666666666668,11.866728746014084,0,4.233333333333333,25.841429909172902,1,21.22893671974426,12.980240516524882,1,95.76666666666668,12.980240516524882,0,4.233333333333333,26.954941679683692,1,21.22893671974426,14.093752287035672,1,95.76666666666668,14.093752287035672,0,4.233333333333333,28.06845345019448,1,21.22893671974426,15.20726405754647,1,95.76666666666668,15.20726405754647,0,4.233333333333333,29.18196522070528,1,21.22893671974426,16.320775828057265,1,95.76666666666668,16.320775828057265,15,0,4.233333333333333,58.13327125398591,1,21.22893671974426,45.27208186133791,1,95.76666666666668,45.27208186133791,1,78.77106328025575,58.13327125398591,1,4.233333333333333,58.13327125398591,15,0,4.233333333333333,58.13327125398591,1,4.233333333333333,24.72791813866211,1,21.22893671974426,11.866728746014084,1,21.22893671974426,45.27208186133791,1,4.233333333333333,58.13327125398591,15,0,21.22893671974426,45.27208186133791,1,21.22893671974426,11.866728746014084,1,95.76666666666668,11.866728746014084,1,95.76666666666668,45.27208186133791,1,21.22893671974426,45.27208186133791,3,0,19.488888888888887,24.744444444444447,3,0,49.99999999999999,16.540000000000006,3,0,80.5111111111111,8.335555555555558,3,0,19.488888888888887,14.488888888888896,3,0,49.99999999999999,12.437777777777784,15,0,19.20562883244871,33.862038640086034,1,19.20562883244871,34.00567622965965,1,22.604749509730894,31.43343835113004,1,22.604749509730894,31.28980076155643,1,19.20562883244871,33.862038640086034,15,0,19.20562883244871,33.862038640086034,1,44.05153881475618,29.40799155804286,1,47.45065949203835,26.835753679513257,1,22.604749509730894,31.28980076155643,1,19.20562883244871,33.862038640086034,15,0,19.20562883244871,33.862038640086034,1,19.20562883244871,34.00567622965965,1,44.05153881475618,29.551629147616467,1,44.05153881475618,29.40799155804286,1,19.20562883244871,33.862038640086034,15,0,22.604749509730894,31.28980076155643,1,22.604749509730894,31.43343835113004,1,47.45065949203835,26.97939126908687,1,47.45065949203835,26.835753679513257,1,22.604749509730894,31.28980076155643,15,0,19.20562883244871,34.00567622965965,1,44.05153881475618,29.551629147616467,1,47.45065949203835,26.97939126908687,1,22.604749509730894,31.43343835113004,1,19.20562883244871,34.00567622965965,15,0,44.05153881475618,29.40799155804286,1,44.05153881475618,29.551629147616467,1,47.45065949203835,26.97939126908687,1,47.45065949203835,26.835753679513257,1,44.05153881475618,29.40799155804286,15,0,44.05153881475618,29.40799155804286,1,44.05153881475618,29.551629147616467,1,47.45065949203835,26.97939126908687,1,47.45065949203835,26.835753679513257,1,44.05153881475618,29.40799155804286,15,0,44.05153881475618,29.40799155804286,1,68.89744879706365,24.953944475999684,1,72.29656947434582,22.38170659747008,1,47.45065949203835,26.835753679513257,1,44.05153881475618,29.40799155804286,15,0,44.05153881475618,29.40799155804286,1,44.05153881475618,29.551629147616467,1,68.89744879706365,25.0975820655733,1,68.89744879706365,24.953944475999684,1,44.05153881475618,29.40799155804286,15,0,47.45065949203835,26.835753679513257,1,47.45065949203835,26.97939126908687,1,72.29656947434582,22.525344187043697,1,72.29656947434582,22.38170659747008,1,47.45065949203835,26.835753679513257,15,0,44.05153881475618,29.551629147616467,1,68.89744879706365,25.0975820655733,1,72.29656947434582,22.525344187043697,1,47.45065949203835,26.97939126908687,1,44.05153881475618,29.551629147616467,15,0,68.89744879706365,24.953944475999684,1,68.89744879706365,25.0975820655733,1,72.29656947434582,22.525344187043697,1,72.29656947434582,22.38170659747008,1,68.89744879706365,24.953944475999684,15,0,27.703430525654174,21.863885091208058,1,27.703430525654174,22.007522680781673,1,31.102551202936358,19.43528480225207,1,31.102551202936358,19.29164721267846,1,27.703430525654174,21.863885091208058,15,0,27.703430525654174,21.863885091208058,1,52.54934050796164,20.750373320697268,1,55.948461185243815,18.178135442167665,1,31.102551202936358,19.29164721267846,1,27.703430525654174,21.863885091208058,15,0,27.703430525654174,21.863885091208058,1,27.703430525654174,22.007522680781673,1,52.54934050796164,20.894010910270875,1,52.54934050796164,20.750373320697268,1,27.703430525654174,21.863885091208058,15,0,31.102551202936358,19.29164721267846,1,31.102551202936358,19.43528480225207,1,55.948461185243815,18.321773031741273,1,55.948461185243815,18.178135442167665,1,31.102551202936358,19.29164721267846,15,0,27.703430525654174,22.007522680781673,1,52.54934050796164,20.894010910270875,1,55.948461185243815,18.321773031741273,1,31.102551202936358,19.43528480225207,1,27.703430525654174,22.007522680781673,15,0,52.54934050796164,20.750373320697268,1,52.54934050796164,20.894010910270875,1,55.948461185243815,18.321773031741273,1,55.948461185243815,18.178135442167665,1,52.54934050796164,20.750373320697268,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
		"pie": "15,0,19.23333333333334,65.2375,1,80.23750000000001,65.2375,1,80.23750000000001,4.233333333333333,1,19.23333333333334,4.233333333333333,1,19.23333333333334,65.2375,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,16,0,50,35,1,50,4.497916666666668,2,50,4.497916666666668,30.502083333333335,30.502083333333335,-1.5707963267948966,-2.443460952792061,1,50,35,16,0,50,35,1,30.393638763707038,58.36595144105199,2,30.393638763707038,58.36595144105199,30.502083333333335,30.502083333333335,2.2689280275926285,-2.094395102393195,1,50,35,16,0,50,35,1,80.03868814969113,40.296631185878184,2,80.03868814969113,40.296631185878184,30.502083333333335,30.502083333333335,0.1745329251994321,-1.7453292519943293,1,50,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
		"pie3D": "15,0,3.9687500000000004,65.50208333333333,1,95.50208333333333,65.50208333333333,1,95.50208333333333,3.9687500000000004,1,3.9687500000000004,3.9687500000000004,1,3.9687500000000004,65.50208333333333,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,15,0,4.233333333333333,63.37533333333333,1,4.233333333333333,17.608666666666664,1,95.76666666666668,17.608666666666664,1,95.76666666666668,63.37533333333333,1,4.233333333333333,63.37533333333333,15,0,4.233333333333333,63.37533333333333,1,4.233333333333333,52.39133333333334,1,4.233333333333333,6.624666666666664,1,4.233333333333333,17.608666666666664,1,4.233333333333333,63.37533333333333,15,0,4.233333333333333,17.608666666666664,1,4.233333333333333,6.624666666666664,1,95.76666666666668,6.624666666666664,1,95.76666666666668,17.608666666666664,1,4.233333333333333,17.608666666666664,23,0,4.233333333333333,30.197690176077085,2,4.233333333333333,30.197690176077085,45.766666666666666,22.88333333333333,-3.141592653589793,-0.5373822171631659,1,20.581753730012693,57.33196016396218,2,20.581753730012693,57.33196016396218,45.766666666666666,22.88333333333333,2.6042104364266274,0.5373822171631659,1,4.233333333333333,30.197690176077085,24,0,50,30.19769017607709,1,50,7.314356842743759,1,50,16.91897649058957,1,50,39.802309823922904,0,50,30.19769017607709,1,20.581753730012693,47.72734051611636,1,20.581753730012693,57.33196016396218,1,50,39.802309823922904,16,0,50,30.19769017607709,1,50,7.314356842743759,2,50,7.314356842743759,45.766666666666666,22.88333333333333,-1.5707963267948966,-2.1081785439580627,1,50,30.19769017607709,16,0,50,39.802309823922904,1,50,16.918976490589575,2,50,16.918976490589575,45.766666666666666,22.88333333333333,-1.5707963267948966,-2.1081785439580627,1,50,39.802309823922904,23,0,20.581753730012693,47.72734051611636,2,20.581753730012693,47.72734051611636,45.766666666666666,22.88333333333333,2.6042104364266265,-2.5162743124029157,1,95.0713681628587,43.77595895620124,2,95.0713681628587,43.77595895620124,45.766666666666666,22.88333333333333,0.08793612402371066,2.5162743124029157,1,20.581753730012693,47.72734051611636,24,0,50,30.19769017607709,1,20.581753730012693,47.72734051611636,1,20.581753730012693,57.33196016396218,1,50,39.802309823922904,0,50,30.19769017607709,1,95.0713681628587,34.17133930835542,1,95.0713681628587,43.77595895620124,1,50,39.802309823922904,16,0,50,30.19769017607709,1,20.581753730012693,47.72734051611636,2,20.581753730012693,47.72734051611636,45.766666666666666,22.88333333333333,2.6042104364266265,-2.5162743124029157,1,50,30.19769017607709,16,0,50,39.802309823922904,1,20.581753730012693,57.33196016396218,2,20.581753730012693,57.33196016396218,45.766666666666666,22.88333333333333,2.6042104364266265,-2.5162743124029157,1,50,39.802309823922904,23,0,95.0713681628587,34.17133930835542,2,95.0713681628587,34.17133930835542,45.766666666666666,22.88333333333333,0.08793612402371066,-0.08793612402371132,1,95.76666666666668,39.80230982392292,2,95.76666666666668,39.80230982392292,45.766666666666666,22.88333333333333,-6.432490598706546e-16,0.08793612402371132,1,95.0713681628587,34.17133930835542,23,0,95.76666666666668,30.197690176077103,2,95.76666666666668,30.197690176077103,45.766666666666666,22.88333333333333,2.4492935982947064e-16,-1.5707963267948941,1,50.00000000000006,16.91897649058957,2,50.00000000000006,16.91897649058957,45.766666666666666,22.88333333333333,-1.5707963267948937,1.5707963267948941,1,95.76666666666668,30.197690176077103,24,0,50,30.19769017607709,1,95.0713681628587,34.17133930835542,1,95.0713681628587,43.77595895620124,1,50,39.802309823922904,0,50,30.19769017607709,1,50.00000000000006,7.314356842743759,1,50.00000000000006,16.91897649058957,1,50,39.802309823922904,16,0,50,30.19769017607709,1,95.0713681628587,34.17133930835542,2,95.0713681628587,34.17133930835542,45.766666666666666,22.88333333333333,0.08793612402371066,-1.6587324508186052,1,50,30.19769017607709,16,0,50,39.802309823922904,1,95.0713681628587,43.77595895620124,2,95.0713681628587,43.77595895620124,45.766666666666666,22.88333333333333,0.08793612402371066,-1.6587324508186052,1,50,39.802309823922904,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
		"doughnut": "15,0,19.23333333333334,65.2375,1,80.23750000000001,65.2375,1,80.23750000000001,4.233333333333333,1,19.23333333333334,4.233333333333333,1,19.23333333333334,65.2375,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,26,0,50,12.123437500000001,1,50,8.310677083333331,2,50,8.310677083333331,26.68932291666667,26.68932291666667,-1.5707963267948966,-2.443460952792061,1,35.29522907278028,52.52446358078899,2,35.29522907278028,52.52446358078899,22.876562500000002,22.876562500000002,2.2689280275926285,2.443460952792061,0,50,35,26,0,35.29522907278028,52.52446358078899,1,32.84443391824365,55.44520751092049,2,32.84443391824365,55.44520751092049,26.68932291666667,26.68932291666667,2.2689280275926285,-2.094395102393195,1,72.52901611226837,38.972473389408634,2,72.52901611226837,38.972473389408634,22.876562500000002,22.876562500000002,0.1745329251994339,2.094395102393195,0,50,35,26,0,72.52901611226837,38.972473389408634,1,76.28385213097972,39.63455228764341,2,76.28385213097972,39.63455228764341,26.68932291666667,26.68932291666667,0.1745329251994321,-1.7453292519943293,1,50.000000000000014,12.123437500000001,2,50.000000000000014,12.123437500000001,22.876562500000002,22.876562500000002,-1.5707963267948972,1.7453292519943293,0,50,35,26,0,50,8.310677083333331,1,50,4.497916666666668,2,50,4.497916666666668,30.502083333333335,30.502083333333335,-1.5707963267948966,-3.2031925095425335,1,51.6430189028514,61.63870204486288,2,51.6430189028514,61.63870204486288,26.68932291666667,26.68932291666667,1.509196470842156,3.2031925095425335,0,50,35,26,0,51.6430189028514,61.63870204486288,1,51.877735888973035,65.44423090841471,2,51.877735888973035,65.44423090841471,30.502083333333335,30.502083333333335,1.509196470842156,-3.079992797637051,1,50.000000000000014,8.310677083333331,2,50.000000000000014,8.310677083333331,26.68932291666667,26.68932291666667,-1.5707963267948954,3.079992797637051,0,50,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
		"scatter": "15,0,4.233333333333333,65.2375,1,95.23750000000001,65.2375,1,95.23750000000001,4.233333333333336,1,4.233333333333333,4.233333333333336,1,4.233333333333333,65.2375,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,42,0,4.497916666666668,65.50208333333333,1,95.50208333333333,65.50208333333333,0,4.497916666666668,55.334722222222226,1,95.50208333333333,55.334722222222226,0,4.497916666666668,45.16736111111111,1,95.50208333333333,45.16736111111111,0,4.497916666666668,35,1,95.50208333333333,35,0,4.497916666666668,24.832638888888887,1,95.50208333333333,24.832638888888887,0,4.497916666666668,14.665277777777776,1,95.50208333333333,14.665277777777776,0,4.497916666666668,4.4979166666666694,1,95.50208333333333,4.4979166666666694,186,0,4.497916666666668,65.50208333333333,1,95.50208333333333,65.50208333333333,0,4.497916666666668,55.334722222222226,1,95.50208333333333,55.334722222222226,0,4.497916666666668,57.36819444444445,1,95.50208333333333,57.36819444444445,0,4.497916666666668,59.40166666666668,1,95.50208333333333,59.40166666666668,0,4.497916666666668,61.43513888888889,1,95.50208333333333,61.43513888888889,0,4.497916666666668,63.46861111111111,1,95.50208333333333,63.46861111111111,0,4.497916666666668,45.16736111111111,1,95.50208333333333,45.16736111111111,0,4.497916666666668,47.20083333333333,1,95.50208333333333,47.20083333333333,0,4.497916666666668,49.23430555555555,1,95.50208333333333,49.23430555555555,0,4.497916666666668,51.26777777777777,1,95.50208333333333,51.26777777777777,0,4.497916666666668,53.301249999999996,1,95.50208333333333,53.301249999999996,0,4.497916666666668,35,1,95.50208333333333,35,0,4.497916666666668,37.033472222222215,1,95.50208333333333,37.033472222222215,0,4.497916666666668,39.066944444444445,1,95.50208333333333,39.066944444444445,0,4.497916666666668,41.10041666666667,1,95.50208333333333,41.10041666666667,0,4.497916666666668,43.13388888888889,1,95.50208333333333,43.13388888888889,0,4.497916666666668,24.832638888888887,1,95.50208333333333,24.832638888888887,0,4.497916666666668,26.866111111111113,1,95.50208333333333,26.866111111111113,0,4.497916666666668,28.899583333333332,1,95.50208333333333,28.899583333333332,0,4.497916666666668,30.933055555555555,1,95.50208333333333,30.933055555555555,0,4.497916666666668,32.96652777777778,1,95.50208333333333,32.96652777777778,0,4.497916666666668,14.665277777777776,1,95.50208333333333,14.665277777777776,0,4.497916666666668,16.698749999999997,1,95.50208333333333,16.698749999999997,0,4.497916666666668,18.73222222222222,1,95.50208333333333,18.73222222222222,0,4.497916666666668,20.765694444444446,1,95.50208333333333,20.765694444444446,0,4.497916666666668,22.79916666666666,1,95.50208333333333,22.79916666666666,0,4.497916666666668,4.4979166666666694,1,95.50208333333333,4.4979166666666694,0,4.497916666666668,6.53138888888889,1,95.50208333333333,6.53138888888889,0,4.497916666666668,8.564861111111114,1,95.50208333333333,8.564861111111114,0,4.497916666666668,10.598333333333336,1,95.50208333333333,10.598333333333336,0,4.497916666666668,12.63180555555556,1,95.50208333333333,12.63180555555556,18,0,19.66527777777778,24.832638888888887,0,18.36416253614209,24.832638888888887,1,19.66527777777778,23.5315236472532,1,20.96639301941347,24.832638888888887,1,19.66527777777778,26.133754130524576,1,18.36416253614209,24.832638888888887,18,0,50,16.698749999999997,0,48.698884758364315,16.698749999999997,1,50,15.397634758364308,1,51.30111524163569,16.698749999999997,1,50,17.999865241635685,1,48.698884758364315,16.698749999999997,18,0,80.33472222222224,8.56486111111111,0,79.03360698058655,8.56486111111111,1,80.33472222222224,7.263745869475423,1,81.63583746385791,8.56486111111111,1,80.33472222222224,9.8659763527468,1,79.03360698058655,8.56486111111111,18,0,19.66527777777778,14.665277777777776,0,18.36416253614209,15.966393019413465,1,18.36416253614209,13.364162536142087,1,20.96639301941347,13.364162536142087,1,20.96639301941347,15.966393019413465,1,18.36416253614209,15.966393019413465,18,0,50,12.631805555555554,0,48.698884758364315,13.93292079719124,1,48.698884758364315,11.330690313919867,1,51.30111524163569,11.330690313919867,1,51.30111524163569,13.93292079719124,1,48.698884758364315,13.93292079719124,36,0,19.66527777777778,24.832638888888887,1,19.66527777777778,24.832638888888887,1,22.69875000001104,24.019249999999992,1,25.732222222244296,23.205861111111105,1,28.765694444443064,22.392472222222228,1,31.79916666666943,21.579083333333326,1,34.83263888888889,20.765694444444446,1,37.866111111115245,19.952305555555547,1,40.89958333334162,19.138916666666667,1,43.93305555556107,18.325527777777776,1,46.966527777780534,17.512138888888888,1,50,16.698749999999997,36,0,50,16.698749999999997,1,50,16.698749999999997,1,53.033472222233264,15.885361111111104,1,56.066944444466515,15.07197222222221,1,59.10041666665839,14.258583333333338,1,62.13388888889854,13.445194444444441,1,65.1673611111111,12.631805555555554,1,68.20083333334436,11.818416666666653,1,71.23430555555004,11.005027777777777,1,74.2677777777833,10.191638888888889,1,77.30125000000277,9.378250000000001,1,80.33472222222224,8.56486111111111,36,0,19.66527777777778,14.665277777777776,1,19.66527777777778,14.665277777777776,1,22.69875000001104,14.461930555555542,1,25.732222222244296,14.258583333333315,1,28.765694444443064,14.05523611111111,1,31.79916666666943,13.851888888888881,1,34.83263888888889,13.648541666666663,1,37.866111111115245,13.445194444444441,1,40.89958333334162,13.241847222222221,1,43.93305555556107,13.038499999999999,1,46.966527777780534,12.835152777777775,1,50,12.631805555555554,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
		"stock": "15,0,4.233333333333333,65.2375,1,95.2375,65.2375,1,95.2375,4.233333333333336,1,4.233333333333333,4.233333333333336,1,4.233333333333333,65.2375,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,42,0,4.497916666666668,65.50208333333333,1,95.50208333333332,65.50208333333333,0,4.497916666666668,55.334722222222226,1,95.50208333333332,55.334722222222226,0,4.497916666666668,45.16736111111111,1,95.50208333333332,45.16736111111111,0,4.497916666666668,35,1,95.50208333333332,35,0,4.497916666666668,24.832638888888887,1,95.50208333333332,24.832638888888887,0,4.497916666666668,14.665277777777776,1,95.50208333333332,14.665277777777776,0,4.497916666666668,4.4979166666666694,1,95.50208333333332,4.4979166666666694,186,0,4.497916666666668,65.50208333333333,1,95.50208333333332,65.50208333333333,0,4.497916666666668,55.334722222222226,1,95.50208333333332,55.334722222222226,0,4.497916666666668,57.36819444444445,1,95.50208333333332,57.36819444444445,0,4.497916666666668,59.40166666666668,1,95.50208333333332,59.40166666666668,0,4.497916666666668,61.43513888888889,1,95.50208333333332,61.43513888888889,0,4.497916666666668,63.46861111111111,1,95.50208333333332,63.46861111111111,0,4.497916666666668,45.16736111111111,1,95.50208333333332,45.16736111111111,0,4.497916666666668,47.20083333333333,1,95.50208333333332,47.20083333333333,0,4.497916666666668,49.23430555555555,1,95.50208333333332,49.23430555555555,0,4.497916666666668,51.26777777777777,1,95.50208333333332,51.26777777777777,0,4.497916666666668,53.301249999999996,1,95.50208333333332,53.301249999999996,0,4.497916666666668,35,1,95.50208333333332,35,0,4.497916666666668,37.033472222222215,1,95.50208333333332,37.033472222222215,0,4.497916666666668,39.066944444444445,1,95.50208333333332,39.066944444444445,0,4.497916666666668,41.10041666666667,1,95.50208333333332,41.10041666666667,0,4.497916666666668,43.13388888888889,1,95.50208333333332,43.13388888888889,0,4.497916666666668,24.832638888888887,1,95.50208333333332,24.832638888888887,0,4.497916666666668,26.866111111111113,1,95.50208333333332,26.866111111111113,0,4.497916666666668,28.899583333333332,1,95.50208333333332,28.899583333333332,0,4.497916666666668,30.933055555555555,1,95.50208333333332,30.933055555555555,0,4.497916666666668,32.96652777777778,1,95.50208333333332,32.96652777777778,0,4.497916666666668,14.665277777777776,1,95.50208333333332,14.665277777777776,0,4.497916666666668,16.698749999999997,1,95.50208333333332,16.698749999999997,0,4.497916666666668,18.73222222222222,1,95.50208333333332,18.73222222222222,0,4.497916666666668,20.765694444444446,1,95.50208333333332,20.765694444444446,0,4.497916666666668,22.79916666666666,1,95.50208333333332,22.79916666666666,0,4.497916666666668,4.4979166666666694,1,95.50208333333332,4.4979166666666694,0,4.497916666666668,6.53138888888889,1,95.50208333333332,6.53138888888889,0,4.497916666666668,8.564861111111114,1,95.50208333333332,8.564861111111114,0,4.497916666666668,10.598333333333336,1,95.50208333333332,10.598333333333336,0,4.497916666666668,12.63180555555556,1,95.50208333333332,12.63180555555556,15,0,13.598333333333334,24.832638888888887,1,13.598333333333334,14.665277777777776,1,25.73222222222222,14.665277777777776,1,25.73222222222222,24.832638888888887,1,13.598333333333334,24.832638888888887,15,0,43.93305555555556,16.698749999999997,1,43.93305555555556,12.631805555555554,1,56.066944444444445,12.631805555555554,1,56.066944444444445,16.698749999999997,1,43.93305555555556,16.698749999999997,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
		"area": "15,0,4.233333333333333,65.2375,1,95.23750000000001,65.2375,1,95.23750000000001,4.233333333333336,1,4.233333333333333,4.233333333333336,1,4.233333333333333,65.2375,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,42,0,4.497916666666668,65.50208333333333,1,95.50208333333333,65.50208333333333,0,4.497916666666668,55.334722222222226,1,95.50208333333333,55.334722222222226,0,4.497916666666668,45.16736111111111,1,95.50208333333333,45.16736111111111,0,4.497916666666668,35,1,95.50208333333333,35,0,4.497916666666668,24.832638888888887,1,95.50208333333333,24.832638888888887,0,4.497916666666668,14.665277777777776,1,95.50208333333333,14.665277777777776,0,4.497916666666668,4.4979166666666694,1,95.50208333333333,4.4979166666666694,186,0,4.497916666666668,65.50208333333333,1,95.50208333333333,65.50208333333333,0,4.497916666666668,55.334722222222226,1,95.50208333333333,55.334722222222226,0,4.497916666666668,57.36819444444445,1,95.50208333333333,57.36819444444445,0,4.497916666666668,59.40166666666668,1,95.50208333333333,59.40166666666668,0,4.497916666666668,61.43513888888889,1,95.50208333333333,61.43513888888889,0,4.497916666666668,63.46861111111111,1,95.50208333333333,63.46861111111111,0,4.497916666666668,45.16736111111111,1,95.50208333333333,45.16736111111111,0,4.497916666666668,47.20083333333333,1,95.50208333333333,47.20083333333333,0,4.497916666666668,49.23430555555555,1,95.50208333333333,49.23430555555555,0,4.497916666666668,51.26777777777777,1,95.50208333333333,51.26777777777777,0,4.497916666666668,53.301249999999996,1,95.50208333333333,53.301249999999996,0,4.497916666666668,35,1,95.50208333333333,35,0,4.497916666666668,37.033472222222215,1,95.50208333333333,37.033472222222215,0,4.497916666666668,39.066944444444445,1,95.50208333333333,39.066944444444445,0,4.497916666666668,41.10041666666667,1,95.50208333333333,41.10041666666667,0,4.497916666666668,43.13388888888889,1,95.50208333333333,43.13388888888889,0,4.497916666666668,24.832638888888887,1,95.50208333333333,24.832638888888887,0,4.497916666666668,26.866111111111113,1,95.50208333333333,26.866111111111113,0,4.497916666666668,28.899583333333332,1,95.50208333333333,28.899583333333332,0,4.497916666666668,30.933055555555555,1,95.50208333333333,30.933055555555555,0,4.497916666666668,32.96652777777778,1,95.50208333333333,32.96652777777778,0,4.497916666666668,14.665277777777776,1,95.50208333333333,14.665277777777776,0,4.497916666666668,16.698749999999997,1,95.50208333333333,16.698749999999997,0,4.497916666666668,18.73222222222222,1,95.50208333333333,18.73222222222222,0,4.497916666666668,20.765694444444446,1,95.50208333333333,20.765694444444446,0,4.497916666666668,22.79916666666666,1,95.50208333333333,22.79916666666666,0,4.497916666666668,4.4979166666666694,1,95.50208333333333,4.4979166666666694,0,4.497916666666668,6.53138888888889,1,95.50208333333333,6.53138888888889,0,4.497916666666668,8.564861111111114,1,95.50208333333333,8.564861111111114,0,4.497916666666668,10.598333333333336,1,95.50208333333333,10.598333333333336,0,4.497916666666668,12.63180555555556,1,95.50208333333333,12.63180555555556,21,0,4.497916666666668,65.50208333333333,1,4.497916666666668,24.832638888888887,1,50,16.698749999999997,1,95.50208333333333,8.56486111111111,1,95.50208333333333,65.50208333333333,1,4.497916666666668,65.50208333333333,1,4.497916666666668,24.832638888888887,21,0,4.497916666666668,65.50208333333333,1,4.497916666666668,14.665277777777776,1,50,12.631805555555554,1,95.50208333333333,65.50208333333333,1,95.50208333333333,65.50208333333333,1,4.497916666666668,65.50208333333333,1,4.497916666666668,14.665277777777776,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
		"areaStacked": "15,0,4.233333333333333,65.2375,1,95.23750000000001,65.2375,1,95.23750000000001,4.233333333333336,1,4.233333333333333,4.233333333333336,1,4.233333333333333,65.2375,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,42,0,4.497916666666668,65.50208333333333,1,95.50208333333333,65.50208333333333,0,4.497916666666668,55.334722222222226,1,95.50208333333333,55.334722222222226,0,4.497916666666668,45.16736111111111,1,95.50208333333333,45.16736111111111,0,4.497916666666668,35,1,95.50208333333333,35,0,4.497916666666668,24.832638888888887,1,95.50208333333333,24.832638888888887,0,4.497916666666668,14.665277777777776,1,95.50208333333333,14.665277777777776,0,4.497916666666668,4.4979166666666694,1,95.50208333333333,4.4979166666666694,186,0,4.497916666666668,65.50208333333333,1,95.50208333333333,65.50208333333333,0,4.497916666666668,55.334722222222226,1,95.50208333333333,55.334722222222226,0,4.497916666666668,57.36819444444445,1,95.50208333333333,57.36819444444445,0,4.497916666666668,59.40166666666668,1,95.50208333333333,59.40166666666668,0,4.497916666666668,61.43513888888889,1,95.50208333333333,61.43513888888889,0,4.497916666666668,63.46861111111111,1,95.50208333333333,63.46861111111111,0,4.497916666666668,45.16736111111111,1,95.50208333333333,45.16736111111111,0,4.497916666666668,47.20083333333333,1,95.50208333333333,47.20083333333333,0,4.497916666666668,49.23430555555555,1,95.50208333333333,49.23430555555555,0,4.497916666666668,51.26777777777777,1,95.50208333333333,51.26777777777777,0,4.497916666666668,53.301249999999996,1,95.50208333333333,53.301249999999996,0,4.497916666666668,35,1,95.50208333333333,35,0,4.497916666666668,37.033472222222215,1,95.50208333333333,37.033472222222215,0,4.497916666666668,39.066944444444445,1,95.50208333333333,39.066944444444445,0,4.497916666666668,41.10041666666667,1,95.50208333333333,41.10041666666667,0,4.497916666666668,43.13388888888889,1,95.50208333333333,43.13388888888889,0,4.497916666666668,24.832638888888887,1,95.50208333333333,24.832638888888887,0,4.497916666666668,26.866111111111113,1,95.50208333333333,26.866111111111113,0,4.497916666666668,28.899583333333332,1,95.50208333333333,28.899583333333332,0,4.497916666666668,30.933055555555555,1,95.50208333333333,30.933055555555555,0,4.497916666666668,32.96652777777778,1,95.50208333333333,32.96652777777778,0,4.497916666666668,14.665277777777776,1,95.50208333333333,14.665277777777776,0,4.497916666666668,16.698749999999997,1,95.50208333333333,16.698749999999997,0,4.497916666666668,18.73222222222222,1,95.50208333333333,18.73222222222222,0,4.497916666666668,20.765694444444446,1,95.50208333333333,20.765694444444446,0,4.497916666666668,22.79916666666666,1,95.50208333333333,22.79916666666666,0,4.497916666666668,4.4979166666666694,1,95.50208333333333,4.4979166666666694,0,4.497916666666668,6.53138888888889,1,95.50208333333333,6.53138888888889,0,4.497916666666668,8.564861111111114,1,95.50208333333333,8.564861111111114,0,4.497916666666668,10.598333333333336,1,95.50208333333333,10.598333333333336,0,4.497916666666668,12.63180555555556,1,95.50208333333333,12.63180555555556,18,0,4.497916666666668,45.16736111111111,1,50,41.10041666666667,1,95.50208333333333,37.03347222222222,1,95.50208333333333,65.50208333333333,1,4.497916666666668,65.50208333333333,1,4.497916666666668,45.16736111111111,21,0,4.497916666666668,19.748958333333334,1,50,14.665277777777776,1,95.50208333333333,37.03347222222222,1,95.50208333333333,37.03347222222222,1,50,41.10041666666667,1,4.497916666666668,45.16736111111111,1,4.497916666666668,19.748958333333334,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
		"areaStackedPercent": "15,0,4.233333333333333,65.2375,1,95.23750000000001,65.2375,1,95.23750000000001,4.233333333333336,1,4.233333333333333,4.233333333333336,1,4.233333333333333,65.2375,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,66,0,4.497916666666668,65.50208333333333,1,95.50208333333333,65.50208333333333,0,4.497916666666668,59.40166666666667,1,95.50208333333333,59.40166666666667,0,4.497916666666668,53.301249999999996,1,95.50208333333333,53.301249999999996,0,4.497916666666668,47.200833333333335,1,95.50208333333333,47.200833333333335,0,4.497916666666668,41.10041666666667,1,95.50208333333333,41.10041666666667,0,4.497916666666668,35,1,95.50208333333333,35,0,4.497916666666668,28.899583333333343,1,95.50208333333333,28.899583333333343,0,4.497916666666668,22.79916666666667,1,95.50208333333333,22.79916666666667,0,4.497916666666668,16.698750000000004,1,95.50208333333333,16.698750000000004,0,4.497916666666668,10.598333333333336,1,95.50208333333333,10.598333333333336,0,4.497916666666668,4.4979166666666694,1,95.50208333333333,4.4979166666666694,306,0,4.497916666666668,65.50208333333333,1,95.50208333333333,65.50208333333333,0,4.497916666666668,59.40166666666667,1,95.50208333333333,59.40166666666667,0,4.497916666666668,60.621750000000006,1,95.50208333333333,60.621750000000006,0,4.497916666666668,61.841833333333334,1,95.50208333333333,61.841833333333334,0,4.497916666666668,63.06191666666667,1,95.50208333333333,63.06191666666667,0,4.497916666666668,64.28200000000001,1,95.50208333333333,64.28200000000001,0,4.497916666666668,53.301249999999996,1,95.50208333333333,53.301249999999996,0,4.497916666666668,54.52133333333333,1,95.50208333333333,54.52133333333333,0,4.497916666666668,55.74141666666666,1,95.50208333333333,55.74141666666666,0,4.497916666666668,56.961499999999994,1,95.50208333333333,56.961499999999994,0,4.497916666666668,58.18158333333333,1,95.50208333333333,58.18158333333333,0,4.497916666666668,47.200833333333335,1,95.50208333333333,47.200833333333335,0,4.497916666666668,48.42091666666668,1,95.50208333333333,48.42091666666668,0,4.497916666666668,49.641000000000005,1,95.50208333333333,49.641000000000005,0,4.497916666666668,50.86108333333334,1,95.50208333333333,50.86108333333334,0,4.497916666666668,52.081166666666675,1,95.50208333333333,52.081166666666675,0,4.497916666666668,41.10041666666667,1,95.50208333333333,41.10041666666667,0,4.497916666666668,42.3205,1,95.50208333333333,42.3205,0,4.497916666666668,43.54058333333333,1,95.50208333333333,43.54058333333333,0,4.497916666666668,44.760666666666665,1,95.50208333333333,44.760666666666665,0,4.497916666666668,45.98075,1,95.50208333333333,45.98075,0,4.497916666666668,35,1,95.50208333333333,35,0,4.497916666666668,36.220083333333335,1,95.50208333333333,36.220083333333335,0,4.497916666666668,37.44016666666667,1,95.50208333333333,37.44016666666667,0,4.497916666666668,38.660250000000005,1,95.50208333333333,38.660250000000005,0,4.497916666666668,39.88033333333334,1,95.50208333333333,39.88033333333334,0,4.497916666666668,28.899583333333343,1,95.50208333333333,28.899583333333343,0,4.497916666666668,30.119666666666674,1,95.50208333333333,30.119666666666674,0,4.497916666666668,31.339750000000006,1,95.50208333333333,31.339750000000006,0,4.497916666666668,32.55983333333334,1,95.50208333333333,32.55983333333334,0,4.497916666666668,33.77991666666667,1,95.50208333333333,33.77991666666667,0,4.497916666666668,22.79916666666667,1,95.50208333333333,22.79916666666667,0,4.497916666666668,24.019250000000007,1,95.50208333333333,24.019250000000007,0,4.497916666666668,25.239333333333338,1,95.50208333333333,25.239333333333338,0,4.497916666666668,26.459416666666673,1,95.50208333333333,26.459416666666673,0,4.497916666666668,27.679500000000004,1,95.50208333333333,27.679500000000004,0,4.497916666666668,16.698750000000004,1,95.50208333333333,16.698750000000004,0,4.497916666666668,17.918833333333342,1,95.50208333333333,17.918833333333342,0,4.497916666666668,19.138916666666674,1,95.50208333333333,19.138916666666674,0,4.497916666666668,20.359000000000005,1,95.50208333333333,20.359000000000005,0,4.497916666666668,21.579083333333337,1,95.50208333333333,21.579083333333337,0,4.497916666666668,10.598333333333336,1,95.50208333333333,10.598333333333336,0,4.497916666666668,11.818416666666671,1,95.50208333333333,11.818416666666671,0,4.497916666666668,13.038500000000004,1,95.50208333333333,13.038500000000004,0,4.497916666666668,14.25858333333334,1,95.50208333333333,14.25858333333334,0,4.497916666666668,15.47866666666667,1,95.50208333333333,15.47866666666667,0,4.497916666666668,4.4979166666666694,1,95.50208333333333,4.4979166666666694,0,4.497916666666668,5.7180000000000035,1,95.50208333333333,5.7180000000000035,0,4.497916666666668,6.938083333333337,1,95.50208333333333,6.938083333333337,0,4.497916666666668,8.158166666666668,1,95.50208333333333,8.158166666666668,0,4.497916666666668,9.378250000000003,1,95.50208333333333,9.378250000000003,18,0,4.497916666666668,38.38912037037037,1,50,36.220083333333335,1,95.50208333333333,4.4979166666666694,1,95.50208333333333,65.50208333333333,1,4.497916666666668,65.50208333333333,1,4.497916666666668,38.38912037037037,21,0,4.497916666666668,4.4979166666666694,1,50,4.4979166666666694,1,95.50208333333333,4.4979166666666694,1,95.50208333333333,4.4979166666666694,1,50,36.220083333333335,1,4.497916666666668,38.38912037037037,1,4.497916666666668,4.4979166666666694,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0"
	};

	function testChartBaseTypes(doGeneratePaths) {
		QUnit.test("Test: Base Charts Draw ", function (assert) {
			let testData = [["", "2014", "2015", "2016"], ["Projected Revenue", "200", "240", "280"], ["Estimated Costs", "250", "260"]];
			let testDataRange = new Asc.Range(0, 0, testData[0].length - 1, testData.length - 1);
			fillData(wsData, testData, testDataRange);

			let oWorksheet;
			oWorksheet = api.GetActiveSheet();

			let calcChart = function (_type) {
				let oChart = oWorksheet.AddChart("'Data'!$A$1:$D$3", true, _type, 2, 100 * 36000, 70 * 36000, 0, 2 * 36000, 7, 3 * 36000);
				oChart.SetTitle("");
				oChart.SetLegendPos("none");

				for (let j = 0; j < oChart.Chart.chart.plotArea.charts[0].axId.length; j++) {
					oChart.Chart.chart.plotArea.charts[0].axId[j].bDelete = true;
				}

				oChart.Chart.recalculate();
				return oChart.Chart.pathMemory.ArrPathCommand.toString();
			};

			let i;
			if (doGeneratePaths) {
				let mapPaths = {};
				for (i = 0; i < gTypes.length; i++) {
					oChart = oWorksheet.AddChart("'Data'!$A$1:$D$3", true, gTypes[i], 2, 100 * 36000, 70 * 36000, 0, 2 * 36000, 7, 3 * 36000);
					oChart.SetTitle("");
					oChart.SetLegendPos("none");

					for (let j = 0; j < oChart.Chart.chart.plotArea.charts[0].axId.length; j++) {
						oChart.Chart.chart.plotArea.charts[0].axId[j].bDelete = true;
					}

					oChart.Chart.recalculate();
					mapPaths[gTypes[i]] = calcChart(gTypes[i]);
				}

				return mapPaths;
			} else {
				for (i in gMapPaths) {
					assert.strictEqual(calcChart(i), gMapPaths[i], i);
				}
			}
		});
	};

	const isEqual = function (a, b) {

		const first = a + ''
		const second = b + ''

		const firstLength = first.indexOf('.') == -1 ? 0 : first.length - (1 + first.indexOf('.'))
		const secondLength = second.indexOf('.') == -1 ? 0 : second.length - (1 + second.indexOf('.'))

		const min = Math.min(firstLength, secondLength)

		if (firstLength != min) {
			const num = Math.pow(10, min)
			a = Math.round((a + Number.EPSILON) * num) / num
		}

		if (secondLength != min) {
			const num = Math.pow(10, min)
			b = Math.round((b + Number.EPSILON) * num) / num
		}

		//Math.round((num + Number.EPSILON) * 100) / 100
		const tollerance = 0.005;
		return Math.abs(a - b) < tollerance;
	}

	function testLinearTrendLineEquation() {
		QUnit.test("Test: Linear trendlines equation", function (assert) {

			const trendline = AscFormat.CTrendline
			const order = 2;

			let size = 6;
			let catVals = [1, 2, 3, 4, 5, 6];
			let valVals = [4, 6, 3, 7, 8, 9];
			let m = 1;
			let b = 2.6667;
			let results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LINEAR, order)

			assert.ok(isEqual(results[0], m), "LinearResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]);
			assert.ok(isEqual(results[1], b), "LinearResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]);

			size = 2;
			catVals = [1, 2];
			valVals = [5, 15];
			m = 10;
			b = -5;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LINEAR, order)

			assert.ok(isEqual(results[0], m), "LinearResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]);
			assert.ok(isEqual(results[1], b), "LinearResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [-1, -2, -3, -4, -5, -6];
			m = -1;
			b = 0;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LINEAR, order)

			assert.ok(isEqual(results[0], m), "LinearResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]);
			assert.ok(isEqual(results[1], b), "LinearResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [-3, 6, -9, 12, -15, 18];
			m = 1.8;
			b = -4.8;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LINEAR, order)

			assert.ok(isEqual(results[0], m), "LinearResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]);
			assert.ok(isEqual(results[1], b), "LinearResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [2, 3, 6, 8, 10, 12];
			m = 2.0857;
			b = -0.4667;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LINEAR, order)

			assert.ok(isEqual(results[0], m), "LinearResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]);
			assert.ok(isEqual(results[1], b), "LinearResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [0, 2, -3, 6, 8, 9];
			m = 2.0571;
			b = -3.5333;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LINEAR, order)

			assert.ok(isEqual(results[0], m), "LinearResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]);
			assert.ok(isEqual(results[1], b), "LinearResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [0, 1, 0, 2, 0, 3];
			m = 0.4;
			b = -0.4;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LINEAR, order)

			assert.ok(isEqual(results[0], m), "LinearResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]);
			assert.ok(isEqual(results[1], b), "LinearResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [-9, -7, -6, -5, -4, -2];
			m = 1.2857;
			b = -10;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LINEAR, order)

			assert.ok(isEqual(results[0], m), "LinearResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]);
			assert.ok(isEqual(results[1], b), "LinearResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [0.1, 0.3, 0.2, 0.5, 0.7, 0.9];
			m = 0.1571;
			b = -0.1;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LINEAR, order)

			assert.ok(isEqual(results[0], m), "LinearResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]);
			assert.ok(isEqual(results[1], b), "LinearResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [-0.5, -0.4, -0.2, -0.1, 0.6, 0.9];
			m = 0.2886;
			b = -0.96;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LINEAR, order)

			assert.ok(isEqual(results[0], m), "LinearResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]);
			assert.ok(isEqual(results[1], b), "LinearResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [2, 1, 4, 3, 6, 5];
			m = 0.8286;
			b = 0.6;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LINEAR, order)

			assert.ok(isEqual(results[0], m), "LinearResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]);
			assert.ok(isEqual(results[1], b), "LinearResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]);

			size = 4;
			catVals = [1, 2, 3, 4];
			valVals = [2, 8, 16, 50];
			m = 15.2;
			b = -19;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LINEAR, order)

			assert.ok(isEqual(results[0], m), "LinearResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]);
			assert.ok(isEqual(results[1], b), "LinearResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [4, -6, 3, -7, 8, 10];
			m = 1.7714;
			b = -4.2;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LINEAR, order)

			assert.ok(isEqual(results[0], m), "LinearResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]);
			assert.ok(isEqual(results[1], b), "LinearResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [5, 50, 500, 5000, 50000, 500000];
			m = 75838;
			b = -172840;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LINEAR, order)

			assert.ok(isEqual(results[0], m), "LinearResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]);
			assert.ok(isEqual(results[1], b), "LinearResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [0, 2, 3, 4, 5, 0];
			m = 0.2857;
			b = 1.3333;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LINEAR, order)

			assert.ok(isEqual(results[0], m), "LinearResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]);
			assert.ok(isEqual(results[1], b), "LinearResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]);
		})
	}

	function testLogarithmicTrendLineEquation() {
		QUnit.test("Test: Logarithmic trendlines equation", function (assert) {

			const trendline = AscFormat.CTrendline;
			const order = 2;

			let size = 6;
			let catVals = [1, 2, 3, 4, 5, 6];
			let valVals = [4, 6, 3, 7, 8, 9];
			let m = 2.5453;
			let b = 3.3757;
			let results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LOG, order)

			assert.ok(isEqual(results[0], m), "LogarithmicResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]);
			assert.ok(isEqual(results[1], b), "LogarithmicResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]);

			size = 2;
			catVals = [1, 2];
			valVals = [5, 15];
			m = 14.427;
			b = 5;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LOG, order)

			assert.ok(isEqual(results[0], m), "LogarithmicResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]);
			assert.ok(isEqual(results[1], b), "LogarithmicResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [-1, -2, -3, -4, -5, -6];
			m = -2.732;
			b = -0.5044;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LOG, order)

			assert.ok(isEqual(results[0], m), "LogarithmicResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]);
			assert.ok(isEqual(results[1], b), "LogarithmicResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [-3, 6, -9, 12, -15, 18];
			m = 4.1668;
			b = -3.0691;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LOG, order)

			assert.ok(isEqual(results[0], m), "LogarithmicResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]);
			assert.ok(isEqual(results[1], b), "LogarithmicResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [2, 3, 6, 8, 10, 12];
			m = 5.6474;
			b = 0.6407;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LOG, order)

			assert.ok(isEqual(results[0], m), "LogarithmicResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]);
			assert.ok(isEqual(results[1], b), "LogarithmicResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [0, 2, -3, 6, 8, 9];
			m = 5.1404;
			b = -1.97;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LOG, order)

			assert.ok(isEqual(results[0], m), "LogarithmicResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]);
			assert.ok(isEqual(results[1], b), "LogarithmicResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [0, 1, 0, 2, 0, 3];
			m = 1.0302;
			b = -0.1296;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LOG, order)

			assert.ok(isEqual(results[0], m), "LogarithmicResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]);
			assert.ok(isEqual(results[1], b), "LogarithmicResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [-9, -7, -6, -5, -4, -2];
			m = 3.5479;
			b = -9.3905;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LOG, order)

			assert.ok(isEqual(results[0], m), "LogarithmicResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]);
			assert.ok(isEqual(results[1], b), "LogarithmicResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [0.1, 0.3, 0.2, 0.5, 0.7, 0.9];
			m = 0.4096;
			b = 0.0008;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LOG, order)

			assert.ok(isEqual(results[0], m), "LogarithmicResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]);
			assert.ok(isEqual(results[1], b), "LogarithmicResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [-0.5, -0.4, -0.2, -0.1, 0.6, 0.9];
			m = 0.735;
			b = -0.756;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LOG, order)

			assert.ok(isEqual(results[0], m), "LogarithmicResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]);
			assert.ok(isEqual(results[1], b), "LogarithmicResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [2, 1, 4, 3, 6, 5];
			m = 2.202;
			b = 1.0854;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LOG, order)

			assert.ok(isEqual(results[0], m), "LogarithmicResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]);
			assert.ok(isEqual(results[1], b), "LogarithmicResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]);

			size = 4;
			catVals = [1, 2, 3, 4];
			valVals = [2, 8, 16, 50];
			m = 29.565;
			b = -4.4898;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LOG, order)

			assert.ok(isEqual(results[0], m), "LogarithmicResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]);
			assert.ok(isEqual(results[1], b), "LogarithmicResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [4, -6, 3, -7, 8, 10];
			m = 3.2191;
			b = -1.5299;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LOG, order)

			assert.ok(isEqual(results[0], m), "LogarithmicResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]);
			assert.ok(isEqual(results[1], b), "LogarithmicResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [5, 50, 500, 5000, 50000, 500000];
			m = 170659;
			b = -94542;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LOG, order)

			assert.ok(isEqual(results[0], m), "LogarithmicResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]);
			assert.ok(isEqual(results[1], b), "LogarithmicResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [0, 2, 3, 4, 5, 0];
			m = 1.3313;
			b = 0.8735;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LOG, order)

			assert.ok(isEqual(results[0], m), "LogarithmicResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]);
			assert.ok(isEqual(results[1], b), "LogarithmicResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]);
		})
	}

	function testPowerTrendLineEquation() {
		QUnit.test("Test: Power trendlines equation", function (assert) {

			const trendline = AscFormat.CTrendline;
			const order = 2;

			let size = 6;
			let catVals = [1, 2, 3, 4, 5, 6];
			let valVals = [4, 6, 3, 7, 8, 9];
			let m = 0.4178;
			let b = 3.6391;
			let results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POWER, order)

			assert.ok(isEqual(results[0], m), "PowerResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]);
			assert.ok(isEqual(results[1], b), "PowerResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]);

			size = 2;
			catVals = [1, 2];
			valVals = [5, 15];
			m = 1.585;
			b = 5;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POWER, order)

			assert.ok(isEqual(results[0], m), "PowerResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]);
			assert.ok(isEqual(results[1], b), "PowerResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [2, 3, 6, 8, 10, 12];
			m = 1.0529;
			b = 1.799;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POWER, order)

			assert.ok(isEqual(results[0], m), "PowerResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]);
			assert.ok(isEqual(results[1], b), "PowerResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [0.1, 0.3, 0.2, 0.5, 0.7, 0.9];
			m = 1.1616;
			b = 0.0984;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POWER, order)

			assert.ok(isEqual(results[0], m), "PowerResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]);
			assert.ok(isEqual(results[1], b), "PowerResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [2, 1, 4, 3, 6, 5];
			m = 0.7283;
			b = 1.347;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POWER, order)

			assert.ok(isEqual(results[0], m), "PowerResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]);
			assert.ok(isEqual(results[1], b), "PowerResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]);

			size = 4;
			catVals = [1, 2, 3, 4];
			valVals = [2, 8, 16, 50];
			m = 2.2106;
			b = 1.8367;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POWER, order)

			assert.ok(isEqual(results[0], m), "PowerResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]);
			assert.ok(isEqual(results[1], b), "PowerResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [5, 50, 500, 5000, 50000, 500000];
			m = 6.2903;
			b = 1.5974;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POWER, order)

			assert.ok(isEqual(results[0], m), "PowerResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]);
			assert.ok(isEqual(results[1], b), "PowerResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [5, 50, 500, 0, 50000, 500000];
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_EXP, order)
			assert.strictEqual(results, undefined, "PowerResults should be undefined, due to the zero value in calculations, got:" + results);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [5, 50, 500, -1, 50000, 500000];
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_EXP, order)
			assert.strictEqual(results, undefined, "PowerResults should be undefined, due to the negative value in calculations, got:" + results);

		})
	}

	function testExponentialTrendLineEquation() {
		QUnit.test("Test: Exponential trendlines equation", function (assert) {

			const trendline = AscFormat.CTrendline
			const order = 2;

			let size = 6;
			let catVals = [1, 2, 3, 4, 5, 6];
			let valVals = [4, 6, 3, 7, 8, 9];
			let m = 0.1647;
			let b = 3.2329;
			let results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_EXP, order)

			assert.ok(isEqual(results[0], m), "ExponentialResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]);
			assert.ok(isEqual(results[1], b), "ExponentialResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]);

			size = 2;
			catVals = [1, 2];
			valVals = [5, 15];
			m = 1.0986;
			b = 1.6667;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_EXP, order)

			assert.ok(isEqual(results[0], m), "ExponentialResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]);
			assert.ok(isEqual(results[1], b), "ExponentialResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [2, 3, 6, 8, 10, 12];
			m = 0.3674;
			b = 1.5776;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_EXP, order)

			assert.ok(isEqual(results[0], m), "ExponentialResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]);
			assert.ok(isEqual(results[1], b), "ExponentialResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [0.1, 0.3, 0.2, 0.5, 0.7, 0.9];
			m = 0.4127;
			b = 0.0829;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_EXP, order)

			assert.ok(isEqual(results[0], m), "ExponentialResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]);
			assert.ok(isEqual(results[1], b), "ExponentialResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [2, 1, 4, 3, 6, 5];
			m = 0.2763;
			b = 1.1384;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_EXP, order)

			assert.ok(isEqual(results[0], m), "ExponentialResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]);
			assert.ok(isEqual(results[1], b), "ExponentialResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]);

			size = 4;
			catVals = [1, 2, 3, 4];
			valVals = [2, 8, 16, 50];
			m = 1.035;
			b = 0.8;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_EXP, order)

			assert.ok(isEqual(results[0], m), "ExponentialResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]);
			assert.ok(isEqual(results[1], b), "ExponentialResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [5, 50, 500, 5000, 50000, 500000];
			m = 2.3026;
			b = 0.5;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_EXP, order)

			assert.ok(isEqual(results[0], m), "ExponentialResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]);
			assert.ok(isEqual(results[1], b), "ExponentialResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [5, 50, 500, 0, 50000, 500000];
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_EXP, order)
			assert.strictEqual(results, undefined, "ExponentialResults should be undefined, due to the zero value in calculations, got:" + results);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [5, 50, 500, -1, 50000, 500000];
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_EXP, order)
			assert.strictEqual(results, undefined, "ExponentialResults should be undefined, due to the negative value in calculations, got:" + results);

		})
	}

	function testPolynomialTrendLineEquation() {
		QUnit.test("Test: Polynomial trendlines equation", function (assert) {
			// the equation is in the form of y = letiables[0] + x * letiables1 + x^2 * letiables2 ...
			const trendline = AscFormat.CTrendline

			let size = 2;
			let catVals = [1, 2];
			let valVals = [5, 15];
			let letiables = [10, -5];
			let order = 2; 
			let results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [4, 6, 3, 7, 8, 9, 11];
			letiables = [0.1667, -0.1905, 4.2857];
			order = 3;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [-1, -2, -3, -4, -5, -6, -7];
			letiables = [0, -1, 0];
			order = 3;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [-3, 6, -9, 12, -15, 18, -21];
			letiables = [-1.1429, 7.8571, -10.286];
			order = 3;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [2, 3, 6, 8, 10, 12, 14];
			letiables = [0, 2.0714, -0.4286];
			order = 3;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [0, 2, -3, 6, 8, 9, 15];
			letiables = [0.4286, -0.9286, 0.4286];
			order = 3;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [0, 1, 0, 2, 0, 3, 0];
			letiables = [-0.0952, 0.9048, -0.8571];
			order = 3;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [-9, -7, -6, -5, -4, -2, -1];
			letiables = [9e-16, 1.2857, -10];
			order = 3;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [0.1, 0.3, 0.2, 0.5, 0.7, 0.9, 1];
			letiables = [0.0095, 0.081, 0.0143];
			order = 3;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [-0.5, -0.4, -0.2, -0.1, 0.6, 0.9, 1];
			letiables = [0.0202, 0.1202, -0.7];
			order = 3;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [2, 1, 4, 3, 6, 5, 7];
			letiables = [0.0357, 0.6071, 0.8571];
			order = 3;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);

			size = 4;
			catVals = [1, 2, 3, 4];
			valVals = [2, 8, 16, 50];
			letiables = [7, -19.8, 16];
			order = 3;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [4, -6, 3, -7, 8, 10, -12];
			letiables = [-0.5357, 3.8929, -4.8571];
			order = 3;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [5, 50, 500, 5000, 50000, 500000];
			letiables = [43357, -227659, 231822];
			order = 3;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [0, 2, 3, 4, 5, 0];
			letiables = [-0.625, 4.6607, -4.5];
			order = 3;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);


			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [4, 6, 3, 7, 8, 9, 11];
			letiables = [-0.0278, 0.5, -1.3294, 5.2857];
			order = 4;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [-1, -2, -3, -4, -5, -6, -7];
			letiables = [0, 0, -1, 5e-12];
			order = 4;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [-3, 6, -9, 12, -15, 18, -21];
			letiables = [-0.6667, 6.8571, -19.476, 13.714];
			order = 4;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [2, 3, 6, 8, 10, 12, 14];
			letiables = [-0.0278, 0.3333, 0.9325, 0.5714];
			order = 4;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [0, 2, -3, 6, 8, 9, 15];
			letiables = [-0.0833, 1.4286, -4.3452, 3.4286];
			order = 4;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [0, 1, 0, 2, 0, 3, 0];
			letiables = [-0.0556, 0.5714, -1.373, 1.1429];
			order = 4;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [-9, -7, -6, -5, -4, -2, -1];
			letiables = [0.0278, -0.3333, 2.4246, -11];
			order = 4;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [0.1, 0.3, 0.2, 0.5, 0.7, 0.9, 1];
			letiables = [-0.0056, 0.0762, -0.1468, 0.2143];
			order = 4;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [-0.5, -0.4, -0.2, -0.1, 0.6, 0.9, 1];
			letiables = [-0.0167, 0.2202, -0.5631, -0.1];
			order = 4;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [2, 1, 4, 3, 6, 5, 7];
			letiables = [-0.0278, 0.369, -0.5317, 1.8571];
			order = 4;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);

			size = 4;
			catVals = [1, 2, 3, 4];
			valVals = [2, 8, 16, 50];
			letiables = [4, -23, 47, -26];
			order = 4;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)
			
			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [4, -6, 3, -7, 8, 10, -12];
			letiables = [-1.0278, 11.798, -38.246, 32.143];
			order = 4;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [5, 50, 500, 5000, 50000, 500000];
			letiables = [19744, -163953, 398218, -265720];
			order = 4;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [0, 2, 3, 4, 5, 0];
			letiables = [-0.2315, 1.8056, -2.6772, 1.3333];
			order = 4;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);
			
			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [4, 6, 3, 7, 8, 9, 11];
			letiables = [-0.0265, 0.3965, -1.7917, 3.4282, 2.2857];
			order = 5;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);
			assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [-1, -2, -3, -4, -5, -6, -7];
			letiables = [0, 5e-13, 0, -1, 6e-11];
			order = 5;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);
			assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [-3, 6, -9, 12, -15, 18, -21];
			letiables = [-0.7273, 10.97, -56, 111.02, -68.571];
			order = 5;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);
			assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [2, 3, 6, 8, 10, 12, 14];
			letiables = [0.0265, -0.452, 2.625, -3.825, 3.5714];
			order = 5;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);
			assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [0, 2, -3, 6, 8, 9, 15];
			letiables = [0.0341, -0.6288, 4.375, -10.462, 7.2857];
			order = 5;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);
			assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [0, 1, 0, 2, 0, 3, 0];
			letiables = [-0.0606, 0.9141, -4.6667, 9.5014, -5.7143];
			order = 5;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);
			assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [-9, -7, -6, -5, -4, -2, -1];
			letiables = [-0.0265, 0.452, -2.625, 7.1822, -14];
			order = 5;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);
			assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [0.1, 0.3, 0.2, 0.5, 0.7, 0.9, 1];
			letiables = [-0.0045,  0.0672, -0.3167, 0.6688, -0.3];
			order = 5;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);
			assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [-0.5, -0.4, -0.2, -0.1, 0.6, 0.9, 1];
			letiables = [ -0.0083, 0.1167, -0.5, 0.9321, -1.0429];
			order = 5;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);
			assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [2, 1, 4, 3, 6, 5, 7];
			letiables = [0.0492, -0.8157, 4.625, -9.3672, 7.4286];
			order = 5;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);
			assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [4, -6, 3, -7, 8, 10, -12];
			letiables = [-0.3144, 4.0025, -15.375, 18.165, -3.4286];
			order = 5;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);
			assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [5, 50, 500, 5000, 50000, 500000];
			letiables = [7517.8, -85506, 337593, -533991, 275562];
			order = 5;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);
			assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [0, 2, 3, 4, 5, 0];
			letiables = [-0.1458, 1.8102, -7.9236, 15.406, -9.1667];
			order = 5;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);
			assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [4, 6, 3, 7, 8, 9, 11];
			letiables = [0.0833, -1.6932, 12.758, -43.458, 65.508, -29.143];
			order = 6;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);
			assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]);
			assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [-1, -2, -3, -4, -5, -6, -7];
			letiables = [-6e-14, 0, 7e-12, -3e-11, -1, 4e-9];
			order = 6;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);
			assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]);
			assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [-3, 6, -9, 12, -15, 18, -21];
			letiables = [-0.4, 7.2727, -48.364, 144, -186.96, 82.286];
			order = 6;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);
			assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]);
			assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [2, 3, 6, 8, 10, 12, 14];
			letiables = [-0.0167, 0.3598, -2.9242, 10.958, -16.241, 9.8571];
			order = 6;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);
			assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]);
			assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [0, 2, -3, 6, 8, 9, 15];
			letiables = [0.175, -3.4659, 25.33, -83.125, 119.9, -58.714];
			order = 6;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);
			assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]);
			assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [0, 1, 0, 2, 0, 3, 0];
			letiables = [-0.0333, 0.6061, -4.0303,12, -15.33, 6.8571];
			order = 6;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);
			assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]);
			assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [-9, -7, -6, -5, -4, -2, -1];
			letiables = [-0.0083, 0.1402, -0.7841, 1.5417, 0.9742, -10.857];
			order = 6;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);
			assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]);
			assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [0.1, 0.3, 0.2, 0.5, 0.7, 0.9, 1];
			letiables = [0.0042, -0.0879, 0.6852, -2.4, 3.7727, -1.8714];
			order = 6;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);
			assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]);
			assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [-0.5, -0.4, -0.2, -0.1, 0.6, 0.9, 1];
			letiables = [0.0013, -0.0333, 0.3021, -1.125, 1.8633, -1.5143];
			order = 6;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);
			assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]);
			assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [2, 1, 4, 3, 6, 5, 7];
			letiables = [-0.0042,  0.1326, -1.4337, 6.7083, -12.471, 9];
			order = 6;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);
			assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]);
			assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [4, -6, 3, -7, 8, 10, -12];
			letiables = [-0.2292, 4.2689, -29.991, 99.208, -152.55, 83];
			order = 6;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);
			assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]);
			assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [5, 50, 500, 5000, 50000, 500000];
			letiables = [2460.4, -35539, 196071, -509186, 611919, -265720];
			order = 6;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);
			assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]);
			assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [0, 2, 3, 4, 5, 0];
			letiables = [-0.0417, 0.5833, -2.9583, 6.4167, -4, -1e-8];
			order = 6;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);
			assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]);
			assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [4, 6, 3, 7, 8, 9, 11];
			letiables = [-0.0694,  1.75, -17.444, 87, -224.99, 279.75, -122];
			order = 7;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);
			assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]);
			assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]);
			assert.ok(isEqual(results[6], letiables[6]), "PolynomialResults are not equal to the expected results: expected seventh constant:" + letiables[6] + ', got:' + results[6]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [-1, -2, -3, -4, -5, -6, -7];
			letiables = [0, -3e-11, -8e-10, 2e-9, 2e-8, -1, -1e-6];
			order = 7;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);
			assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]);
			assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]);
			assert.ok(isEqual(results[6], letiables[6]), "PolynomialResults are not equal to the expected results: expected seventh constant:" + letiables[6] + ', got:' + results[6]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [-3, 6, -9, 12, -15, 18, -21];
			letiables = [-1.0667, 25.2, -234.67, 1092, -2644.3, 3103.8, -1344];
			order = 7;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);
			assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]);
			assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]);
			assert.ok(isEqual(results[6], letiables[6]), "PolynomialResults are not equal to the expected results: expected seventh constant:" + letiables[6] + ', got:' + results[6]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [2, 3, 6, 8, 10, 12, 14];
			letiables = [0.0083, -0.2167, 2.25, -11.833, 32.742, -41.95, 21];
			order = 7;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);
			assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]);
			assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]);
			assert.ok(isEqual(results[6], letiables[6]), "PolynomialResults are not equal to the expected results: expected seventh constant:" + letiables[6] + ', got:' + results[6]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [0, 2, -3, 6, 8, 9, 15];
			letiables = [-0.1333, 3.375, -33.708, 167.88,  -431.66, 531.25, -237];
			order = 7;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);
			assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]);
			assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]);
			assert.ok(isEqual(results[6], letiables[6]), "PolynomialResults are not equal to the expected results: expected seventh constant:" + letiables[6] + ', got:' + results[6]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [0, 1, 0, 2, 0, 3, 0];
			letiables = [-0.0889, 2.1, -19.556, 91, -220.36, 258.9, -112];
			order = 7;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);
			assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]);
			assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]);
			assert.ok(isEqual(results[6], letiables[6]), "PolynomialResults are not equal to the expected results: expected seventh constant:" + letiables[6] + ', got:' + results[6]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [-9, -7, -6, -5, -4, -2, -1];
			letiables = [-0.0083, 0.1917, -1.75, 8.125, -20.242, 26.683, -22];
			order = 7;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);
			assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]);
			assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]);
			assert.ok(isEqual(results[6], letiables[6]), "PolynomialResults are not equal to the expected results: expected seventh constant:" + letiables[6] + ', got:' + results[6]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [0.1, 0.3, 0.2, 0.5, 0.7, 0.9, 1];
			letiables = [-0.0036, 0.0908, -0.9069, 4.5458, -11.839, 14.913, -6.7];
			order = 7;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);
			assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]);
			assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]);
			assert.ok(isEqual(results[6], letiables[6]), "PolynomialResults are not equal to the expected results: expected seventh constant:" + letiables[6] + ', got:' + results[6]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [-0.5, -0.4, -0.2, -0.1, 0.6, 0.9, 1];
			letiables = [0.0076, -0.1821, 1.6993, -7.8646, 18.843, -21.703, 8.7];
			order = 7;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);
			assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]);
			assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]);
			assert.ok(isEqual(results[6], letiables[6]), "PolynomialResults are not equal to the expected results: expected seventh constant:" + letiables[6] + ', got:' + results[6]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [2, 1, 4, 3, 6, 5, 7];
			letiables = [0.0875, -2.1042, 19.979, -94.979,  235.43, -282.42, 126];
			order = 7;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);
			assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]);
			assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]);
			assert.ok(isEqual(results[6], letiables[6]), "PolynomialResults are not equal to the expected results: expected seventh constant:" + letiables[6] + ', got:' + results[6]);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [4, -6, 3, -7, 8, 10, -12];
			letiables = [0.3792, -9.3292, 90.271, -435.35, 1090.4, -1322.3, 590];
			order = 7;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);
			assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]);
			assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]);
			assert.ok(isEqual(results[6], letiables[6]), "PolynomialResults are not equal to the expected results: expected seventh constant:" + letiables[6] + ', got:' + results[6]);

			size = 2;
			catVals = [1, 2];
			valVals = [5, 15];
			letiables = [10, -5];
			order = 3; 
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)

			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);

			size = 4;
			catVals = [1, 2, 3, 4];
			valVals = [2, 8, 16, 50];
			letiables = [-26, 47, -23, 4];
			letiables = [4, -23, 47, -26];
			order = 5;
			results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order)
			
			assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]);
			assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]);
			assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]);
			assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]);

		})
	}

	const areSameStrings = function (result, check) {
		for(let i=0; i< result.length; i++){
			if(result[i].lblName !== check[i].lblName){
				return false
			}
			if(result[i].val !== check[i].val){
				return false
			}
		}
		return true
	}

	const areSame = function (result, check){
		for(let i=0; i< result.length; i++){
			if(!isEqual(result[i], check[i])){
				return false
			}
		}
		return true
	}

	function testMovingAverageTrendLineResuts(){
		QUnit.test("Test: MovingAverage trendlines results", function (assert) {

			const trendline = AscFormat.CTrendline;
			const order = 2;

			let ptCount = 6;
			let catVals = [1, 2, 3, 4, 5, 6];
			let valVals = [4, 6, 3, 7, 8, 9];
			let catValResults = [2, 3, 4, 5, 6];
			let valValResults = [5, 4.5, 5, 7.5, 8.5];
			let period = 2;
			let results = trendline.prototype._getMAline(catVals, valVals, ptCount, period)

			assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals );
			assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals );

			ptCount = 2;
			catVals = [1, 2];
			valVals = [5, 15];
			catValResults = [];
			valValResults = [];
			period = 3;
			results = trendline.prototype._getMAline(catVals, valVals, ptCount, period)

			assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals );
			assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals );

			ptCount = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [-1, -2, -3, -4, -5, -6];
			catValResults = [4, 5, 6];
			valValResults = [-2.5, -3.5, -4.5];
			period = 4;
			results = trendline.prototype._getMAline(catVals, valVals, ptCount, period)

			assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals );
			assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals );

			ptCount = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [-3, 6, -9, 12, -15, 18];
			catValResults = [5, 6];
			valValResults = [-1.8, 2.4];
			period = 5;
			results = trendline.prototype._getMAline(catVals, valVals, ptCount, period)

			assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals );
			assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals );

			ptCount = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [2, 3, 6, 8, 10, 12];
			catValResults = [];
			valValResults = [];
			period = 6;
			results = trendline.prototype._getMAline(catVals, valVals, ptCount, period)

			assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals );
			assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals );

			ptCount = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [0, 2, -3, 6, 8, 9];
			catValResults = [2, 3, 4, 5, 6];
			valValResults = [1, -0.5, 1.5, 7, 8.5];
			period = 2;
			results = trendline.prototype._getMAline(catVals, valVals, ptCount, period)

			assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals );
			assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals );

			ptCount = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [0, 1, 0, 2, 0, 3];
			catValResults = [3, 4, 5, 6];
			valValResults = [0.333333, 1, 0.666667, 1.666667];
			period = 3;
			results = trendline.prototype._getMAline(catVals, valVals, ptCount, period)

			assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals );
			assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals );

			ptCount = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [-9, -7, -6, -5, -4, -2];
			catValResults = [4, 5, 6];
			valValResults = [-6.75, -5.5, -4.25];
			period = 4;
			results = trendline.prototype._getMAline(catVals, valVals, ptCount, period)

			assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals );
			assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals );

			ptCount = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [0.1, 0.3, 0.2, 0.5, 0.7, 0.9];
			catValResults = [5, 6];
			valValResults = [0.36, 0.52];
			period = 5;
			results = trendline.prototype._getMAline(catVals, valVals, ptCount, period)

			assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals );
			assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals );

			ptCount = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [-0.5, -0.4, -0.2, -0.1, 0.6, 0.9];
			catValResults = [2, 3, 4, 5, 6];
			valValResults = [-0.45, -0.3, -0.15, 0.25, 0.75];
			period = 2;
			results = trendline.prototype._getMAline(catVals, valVals, ptCount, period)

			assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals );
			assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals );

			ptCount = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [2, 1, 4, 3, 6, 5];
			catValResults = [3, 4, 5, 6];
			valValResults = [2.333333, 2.666667, 4.333333, 4.666667];
			period = 3;
			results = trendline.prototype._getMAline(catVals, valVals, ptCount, period)

			assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals );
			assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals );

			ptCount = 4;
			catVals = [1, 2, 3, 4];
			valVals = [2, 8, 16, 50];
			catValResults = [3, 4];
			valValResults = [8.666667, 24.666667];
			period = 3;
			results = trendline.prototype._getMAline(catVals, valVals, ptCount, period)

			assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals );
			assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals );

			ptCount = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [4, -6, 3, -7, 8, 10];
			catValResults = [4, 5, 6];
			valValResults = [-1.5, -0.5, 3.5];
			period = 4;
			results = trendline.prototype._getMAline(catVals, valVals, ptCount, period)

			assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals );
			assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals );

			ptCount = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [5, 50, 500, 5000, 50000, 500000];
			catValResults = [5, 6];
			valValResults = [11111, 111110];
			period = 5;
			results = trendline.prototype._getMAline(catVals, valVals, ptCount, period)

			assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals );
			assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals );

			ptCount = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [0, 2, 3, 4, 5, 0];
			catValResults = [2, 3, 4, 5, 6];
			valValResults = [1, 2.5, 3.5, 4.5, 2.5];
			period = 2;
			results = trendline.prototype._getMAline(catVals, valVals, ptCount, period)

			assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals );
			assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals );

			ptCount = 6;
			catVals = [1, 2, 6];
			valVals = [4, 6, 10];
			catValResults = [2, 3, 6];
			valValResults = [5, 6, 10];
			period = 2;
			results = trendline.prototype._getMAline(catVals, valVals, ptCount, period)

			assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals );
			assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals );

			ptCount = 3;
			catVals = [1, 2];
			valVals = [4, 6];
			catValResults = [2, 3];
			valValResults = [5, 6];
			period = 2;
			results = trendline.prototype._getMAline(catVals, valVals, ptCount, period)

			assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals );
			assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals );

			ptCount = 7;
			catVals = [1, 2, 6, 7];
			valVals = [4, 6, 10, 13];
			catValResults = [2, 3, 6, 7];
			valValResults = [5, 6, 10, 11.5];
			period = 2;
			results = trendline.prototype._getMAline(catVals, valVals, ptCount, period)

			assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals );
			assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals );

			ptCount = 7;
			catVals = [1, 4, 6, 7];
			valVals = [4, 5, 10, 13];
			catValResults = [2, 4, 5, 6, 7];
			valValResults = [4, 5, 5, 10, 11.5];
			period = 2;
			results = trendline.prototype._getMAline(catVals, valVals, ptCount, period)

			assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals );
			assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals );

			ptCount = 7;
			catVals = [4, 6, 7];
			valVals = [5, 10, 13];
			catValResults = [4, 5, 6, 7];
			valValResults = [5, 5, 10, 11.5];
			period = 2;
			results = trendline.prototype._getMAline(catVals, valVals, ptCount, period)

			assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals );
			assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals );

			ptCount = 7;
			catVals = [1, 2, 3, 4, 6];
			valVals = [4, 6, 3, 7, 10];
			catValResults = [3, 4, 5, 6, 7];
			valValResults = [4.333333, 5.333333, 5, 8.5, 10];
			period = 3;
			results = trendline.prototype._getMAline(catVals, valVals, ptCount, period)

			assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals );
			assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals );

			ptCount = 7;
			catVals = [1, 2, 3, 6];
			valVals = [4, 6, 3, 10];
			catValResults = [3, 4, 5, 6, 7];
			valValResults = [4.333333, 4.5, 3, 10, 10];
			period = 3;
			results = trendline.prototype._getMAline(catVals, valVals, ptCount, period)

			assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals );
			assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals );

			ptCount = 7;
			catVals = [4, 6];
			valVals = [5, 10];
			catValResults = [4, 5, 6, 7];
			valValResults = [5, 5, 10, 10];
			period = 2;
			results = trendline.prototype._getMAline(catVals, valVals, ptCount, period)

			assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals );
			assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals );

		})
	}

	function testDispR(){
		QUnit.test("Test: Check R squared", function (assert) {

			const trendline = AscFormat.CTrendline

			let size = 6;
			let catVals = [1, 2, 3, 4, 5, 6];
			let valVals = [4, 6, 3, 7, 8, 9];
			let letiables = [1, 2.6667];
			let rSquared = 0.6522;
			let results = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_LINEAR);

			assert.ok(isEqual(results, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + results);

			size = 2;
			catVals = [1, 2];
			valVals = [5, 15];
			letiables = [10, -5];
			rSquared = 1;
			results = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_LINEAR);

			assert.ok(isEqual(results, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + results);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [-1, -2, -3, -4, -5, -6];
			letiables = [-1, 0];
			rSquared = 1;
			results = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_LINEAR);

			assert.ok(isEqual(results, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + results);

			size = 6;
			catVals = [0, 0.693147181, 1.098612289, 1.386294361, 1.609437912, 1.791759469];
			valVals = [-3, 6, -9, 12, -15, 18];
			letiables = [4.1668, -3.0691];
			rSquared = 0.0473;
			results = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_LOG);

			assert.ok(isEqual(results, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + results);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [0.693147181, 1.098612289, 1.791759469, 2.079441542, 2.302585093, 2.48490665];
			letiables = [0.3674, 1.5776];
			rSquared = 0.9291;
			results = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_EXP);

			assert.ok(isEqual(results, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + results);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [0, 2, -3, 6, 8, 9];
			letiables = [0.4107, -0.8179, 0.3];
			rSquared = 0.709;
			results = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_POLY);

			assert.ok(isEqual(results, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + results);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [0, 1, 0, 2, 0, 3];
			letiables = [ 0.1296, -1.254, 3.75973, -2.6667];
			rSquared = 0.5397;
			results = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_POLY);

			assert.ok(isEqual(results, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + results);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [-9, -7, -6, -5, -4, -2];
			letiables = [3e-14, 0.0926, -0.9722, 4.2209, -12.333];
			rSquared = 0.9995;
			results = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_POLY);

			assert.ok(isEqual(results, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + results);

			size = 6;
			catVals = [0, 0.693147181, 1.098612289, 1.386294361, 1.609437912, 1.791759469];
			valVals = [-2.302585093, -1.203972804, -1.609437912, -0.693147181, -0.356674944, -0.105360516];
			letiables = [1.1616, 0.0984];
			rSquared = 0.9217;
			results = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_POWER);

			assert.ok(isEqual(results, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + results);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [-0.5, -0.4, -0.2, -0.1, 0.6, 0.9];
			letiables = [-0.0217,  0.3625, -2.25, 6.4375, -8.2283, 3.2];
			rSquared = 1;
			results = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_POLY);

			assert.ok(isEqual(results, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + results);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [0.693147181, 0, 1.386294361, 1.098612289, 1.791759469, 1.609437912];
			letiables = [0.2763, 1.1384];
			rSquared = 0.6496;
			results = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_EXP);

			assert.ok(isEqual(results, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + results);

			size = 4;
			catVals = [1, 2, 3, 4];
			valVals = [2, 8, 16, 50];
			letiables = [15.2, -19];
			rSquared = 0.8371;
			results = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_LINEAR);

			assert.ok(isEqual(results, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + results);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [4, -6, 3, -7, 8, 10];
			letiables = [1.7714, -4.2];
			rSquared = 0.2197;
			results = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_LINEAR);

			assert.ok(isEqual(results, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + results);

			size = 6;
			catVals = [0, 0.693147181, 1.098612289, 1.386294361, 1.609437912, 1.791759469];
			valVals = [1.609437912, 3.912023005, 6.214608098, 8.517193191, 10.81977828, 13.12236338];
			letiables = [6.2903, 1.5974];
			rSquared = 0.9537;
			results = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_POWER);

			assert.ok(isEqual(results, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + results);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [0, 2, 3, 4, 5, 0];
			letiables = [0.2857, 1.3333];
			rSquared = 0.067;
			results = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_LINEAR);

			assert.ok(isEqual(results, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + results);

		})
	}

	function testIntercept () {
		QUnit.test("Test: Interception equation + rSquared", function (assert) {

			const trendline = AscFormat.CTrendline

			let size = 6;
			let catVals = [1, 2, 3, 4, 5, 6];
			let valVals = [4, 6, 3, 7, 8, 9];
			let letiables = [1.6154, 0];
			let rSquared = 0.6522;
			let order = 2;
			let intercept = 0;
			let equationResults = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LINEAR, order, intercept);
			let rSquaredResults = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_LINEAR);

			assert.ok(isEqual(equationResults[0], letiables[0]), "LinearResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + equationResults[0]);
			assert.ok(isEqual(equationResults[1], letiables[1]), "LinearResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + equationResults[1]);
			assert.ok(isEqual(rSquaredResults, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + rSquaredResults);

			size = 2;
			catVals = [1, 2];
			valVals = [5, 15];
			letiables = [7, 0];
			rSquared = 0.9;
			order = 2;
			intercept = 0;
			equationResults = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LINEAR, order, intercept);
			rSquaredResults = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_LINEAR);

			assert.ok(isEqual(equationResults[0], letiables[0]), "LinearResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + equationResults[0]);
			assert.ok(isEqual(equationResults[1], letiables[1]), "LinearResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + equationResults[1]);
			assert.ok(isEqual(rSquaredResults, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + rSquaredResults);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [-1, -2, -3, -4, -5, -6];
			m = -2.732;
			b = -0.5044;
			letiables = [-2.732, -0.5044]
			rSquared = 0.9363;
			order = 2;
			intercept = 0;
			equationResults = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LOG, order, intercept);
			rSquaredResults = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_LOG);

			assert.ok(isEqual(equationResults[0], letiables[0]), "LogarithmicResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + equationResults[0]);
			assert.ok(isEqual(equationResults[1], letiables[1]), "LogarithmicResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + equationResults[1]);
			assert.ok(isEqual(rSquaredResults, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquaredResults + ', got:' + rSquaredResults);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [-3, 6, -9, 12, -15, 18];
			letiables = [0.7232, -2.8125, 0];
			rSquared = 0.1269;
			order = 3;
			intercept = 0;
			equationResults = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order, intercept);
			rSquaredResults = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_POLY);

			assert.ok(isEqual(equationResults[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + equationResults[0]);
			assert.ok(isEqual(equationResults[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + equationResults[1]);
			assert.ok(isEqual(equationResults[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + equationResults[2]);
			assert.ok(isEqual(rSquaredResults, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + rSquaredResults);
			

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [2, 3, 6, 8, 10, 12];
			letiables = [0.4726, 1];
			rSquared = 0.8936;
			order = 2;
			intercept = 1;

			equationResults = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_EXP, order, intercept);
			rSquaredResults = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_EXP);

			assert.ok(isEqual(equationResults[0], letiables[0]), "ExponentialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + equationResults[0]);
			assert.ok(isEqual(equationResults[1], letiables[1]), "ExponentialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + equationResults[1]);
			assert.ok(isEqual(rSquaredResults, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + rSquaredResults);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [2, 3, 6, 8, 10, 12];
			letiables = [0.3126, 2];
			rSquared = 0.9455;
			order = 2;
			intercept = 2;

			equationResults = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_EXP, order, intercept);
			rSquaredResults = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_EXP);

			assert.ok(isEqual(equationResults[0], letiables[0]), "ExponentialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + equationResults[0]);
			assert.ok(isEqual(equationResults[1], letiables[1]), "ExponentialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + equationResults[1]);
			assert.ok(isEqual(rSquaredResults, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + rSquaredResults);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [0, 2, -3, 6, 8, 9];
			letiables = [-0.0662, 0.9524, -1.7176, 0];
			rSquared = 0.719;
			order = 4;
			intercept = 0;

			equationResults = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order, intercept);
			rSquaredResults = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_POLY);

			assert.ok(isEqual(equationResults[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + equationResults[0]);
			assert.ok(isEqual(equationResults[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + equationResults[1]);
			assert.ok(isEqual(equationResults[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + equationResults[2]);
			assert.ok(isEqual(equationResults[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + equationResults[3]);
			assert.ok(isEqual(rSquaredResults, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + rSquaredResults);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [0, 1, 0, 2, 0, 3];
			letiables = [0.045, -0.4827, 1.5552, -1.1891, 0];
			rSquared = 0.5928;
			order = 5;
			intercept = 0;

			equationResults = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order, intercept);
			rSquaredResults = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_POLY);

			assert.ok(isEqual(equationResults[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + equationResults[0]);
			assert.ok(isEqual(equationResults[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + equationResults[1]);
			assert.ok(isEqual(equationResults[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + equationResults[2]);
			assert.ok(isEqual(equationResults[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + equationResults[3]);
			assert.ok(isEqual(equationResults[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + equationResults[4]);
			assert.ok(isEqual(rSquaredResults, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + rSquaredResults);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [-9, -7, -6, -5, -4, -2];
			letiables = [-0.0501, 0.8914, -5.857, 17.348, -21.228, 0];
			rSquared = 0.9906;
			order = 6;
			intercept = 0;

			equationResults = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order, intercept);
			rSquaredResults = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_POLY);

			assert.ok(isEqual(equationResults[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + equationResults[0]);
			assert.ok(isEqual(equationResults[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + equationResults[1]);
			assert.ok(isEqual(equationResults[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + equationResults[2]);
			assert.ok(isEqual(equationResults[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + equationResults[3]);
			assert.ok(isEqual(equationResults[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + equationResults[4]);
			assert.ok(isEqual(equationResults[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + equationResults[5]);
			assert.ok(isEqual(rSquaredResults, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + rSquaredResults);

			size = 7;
			catVals = [1, 2, 3, 4, 5, 6, 7];
			valVals = [0.1, 0.3, 0.2, 0.5, 0.7, 0.9, 1];
			letiables = [0.001, -0.0219, 0.1707, -0.5973, 0.9099, -0.3486, 0];
			rSquared = 0.9822;
			order = 7;
			intercept = 0;

			equationResults = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order, intercept);
			rSquaredResults = trendline.prototype._dispRSquared(catVals, valVals, equationResults, AscFormat.TRENDLINE_TYPE_POLY);

			assert.ok(isEqual(equationResults[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + equationResults[0]);
			assert.ok(isEqual(equationResults[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + equationResults[1]);
			assert.ok(isEqual(equationResults[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + equationResults[2]);
			assert.ok(isEqual(equationResults[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + equationResults[3]);
			assert.ok(isEqual(equationResults[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + equationResults[4]);
			assert.ok(isEqual(equationResults[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + equationResults[5]);
			assert.ok(isEqual(equationResults[6], letiables[6]), "PolynomialResults are not equal to the expected results: expected seventh constant:" + letiables[6] + ', got:' + equationResults[6]);
			assert.ok(isEqual(rSquaredResults, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + rSquaredResults);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [-0.5, -0.4, -0.2, -0.1, 0.6, 0.9];
			letiables = [0.5286, -2];
			rSquared = 0.9023;
			order = 2;
			intercept = -2;
			equationResults = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LINEAR, order, intercept);
			rSquaredResults = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_LINEAR);

			assert.ok(isEqual(equationResults[0], letiables[0]), "LinearResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + equationResults[1]);
			assert.ok(isEqual(equationResults[1], letiables[1]), "LinearResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + equationResults[0]);
			assert.ok(isEqual(rSquaredResults, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + rSquaredResults);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [2, 1, 4, 3, 6, 5];
			letiables = [-1.8864, 12.365]
			rSquared = 0.6865;
			order = 2;
			intercept = 12.365;
			equationResults = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LINEAR, order, intercept)
			rSquaredResults = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_LINEAR)

			assert.ok(isEqual(equationResults[0], letiables[0]), "LinearResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + equationResults[0]);
			assert.ok(isEqual(equationResults[1], letiables[1]), "LinearResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + equationResults[1]);
			assert.ok(isEqual(rSquaredResults, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + rSquaredResults);

			size = 4;
			catVals = [1, 2, 3, 4];
			valVals = [2, 8, 16, 50];
			letiables = [0.1223, 12.365]
			rSquared = 0.873;
			order = 2;
			intercept = 12.365;
			equationResults = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_EXP, order, intercept);
			rSquaredResults = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_EXP);

			assert.ok(isEqual(equationResults[0], letiables[0]), "ExponentialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + equationResults[0]);
			assert.ok(isEqual(equationResults[1], letiables[1]), "ExponentialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + equationResults[1]);
			assert.ok(isEqual(rSquaredResults, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + rSquaredResults);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [4, -6, 3, -7, 8, 10];
			letiables = [2.4079, -6.958]
			rSquared = 0.2197;
			order = 2;
			intercept = -6.958;
			equationResults = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LINEAR, order, intercept);
			rSquaredResults = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_LINEAR);

			assert.ok(isEqual(equationResults[0], letiables[0]), "LinearResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + equationResults[0]);
			assert.ok(isEqual(equationResults[1], letiables[1]), "LinearResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + equationResults[1]);
			assert.ok(isEqual(rSquaredResults, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + rSquaredResults);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [5, 50, 500, 5000, 50000, 500000];
			letiables = [2.6197, 0.1265]
			rSquared = 0.9993;
			order = 2;
			intercept = 0.1265;
			equationResults = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_EXP, order, intercept);
			rSquaredResults = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_EXP);

			assert.ok(isEqual(equationResults[0], letiables[0]), "ExponentialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + equationResults[0]);
			assert.ok(isEqual(equationResults[1], letiables[1]), "ExponentialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + equationResults[1]);
			assert.ok(isEqual(rSquaredResults, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + rSquaredResults);

			size = 6;
			catVals = [1, 2, 3, 4, 5, 6];
			valVals = [0, 2, 3, 4, 5, 0];
			letiables = [0.5642, 0.1265]
			rSquared = 0.067;
			order = 2;
			intercept = 0.1265;
			equationResults = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LINEAR, order, intercept);
			rSquaredResults = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_LINEAR);

			assert.ok(isEqual(equationResults[0], letiables[0]), "LinearResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + equationResults[0]);
			assert.ok(isEqual(equationResults[1], letiables[1]), "LinearResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + equationResults[1]);
			assert.ok(isEqual(rSquaredResults, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + rSquaredResults);
		})
	}

	const _obtainEquationStorage = function (type) {
		const storage = {
			[AscFormat.TRENDLINE_TYPE_EXP]: {
				calcYVal: function (val, supps, isLog) {
					const res = supps[0] * Math.exp(val * supps[1]);
					if (isLog && res <= 0){
						return NaN;
					} else {
						return isLog ? (Math.log(res) / Math.log(isLog)) : res;
					}
				}, calcXVal: function (val, supps, isLog) {
					val = isLog ? Math.pow(isLog, val) : val;
					return Math.log(val / supps[0]) / supps[1];
				}, calcSlope: function (val, supps, isLog) {
					if (!isLog){
						return supps[0] * supps[1] * Math.exp(val * supps[1]);
					} else {
						return (Math.log(Math.exp(1)) / Math.log(isLog)) * supps[1];
					}
				}
			}, [AscFormat.TRENDLINE_TYPE_LINEAR]: {
				calcYVal: function (val, supps, isLog) {
					const res = supps[1] * val + supps[0];
					if (isLog && res <= 0){
						return NaN;
					} else {
						return isLog ? (Math.log(res) / Math.log(isLog)) : res;
					}
				}, calcXVal: function (val, supps, isLog) {
					val = isLog ? Math.pow(isLog, val) : val;
					return (val - supps[0]) / supps[1];
				}, calcSlope: function (val, supps, isLog) {
					if (!isLog){
						return supps[1];
					} else {
						return supps[1] / (Math.log(isLog) * (supps[1] * val + supps[0]));
					}
				}
			}, [AscFormat.TRENDLINE_TYPE_LOG]: {
				calcYVal: function (val, supps, isLog) {
					if(val > 0){
						const res = supps[1] * Math.log(val) + supps[0];
						if (isLog && res <= 0){
							return NaN;
						} else {
							return isLog ? (Math.log(res) / Math.log(isLog)) : res;
						}
					} else {
						return NaN;
					}
				}, calcXVal: function (val, supps, isLog) {
					val = isLog ? Math.pow(isLog, val) : val;
					return Math.exp((val - supps[0]) / supps[1]);
				}, calcSlope: function (val, supps, isLog) {
					if (!isLog){
						return supps[1] / val;
					} else {
						return supps[1] / (Math.log(isLog) * val * (supps[1] * Math.log(val) + supps[0]));
					}
				}
			}, [AscFormat.TRENDLINE_TYPE_POLY]: {
				calcYVal: function (val, supps) {
					let result = 0;
					let power = 0;
					for (let i = 0; i < supps.length; i++) {
						result += (Math.pow(val, power) * supps[i]);
						power++;
					}
					return result;
				}
			}, [AscFormat.TRENDLINE_TYPE_POWER]: {
				calcYVal: function (val, supps, isLog) {
					const res = supps[0] * Math.pow(val, supps[1]);
					if (isLog && res <= 0){
						return NaN;
					} else {
						return isLog ? (Math.log(res) / Math.log(isLog)) : res;
					}
				}, calcXVal: function (val, supps, isLog) {
					val = isLog ? Math.pow(isLog, val) : val;
					return Math.pow((val / supps[0]), 1 / supps[1]);
				}, calcSlope: function (val, supps, isLog) {
					if (!isLog){
						return supps[0] * supps[1] * Math.pow(val, supps[1] - 1);
					} else {
						return supps[1] / (Math.log(isLog) * val);
					}
				}
			}
		}

		return storage.hasOwnProperty(type) ? storage[type] : null;
	}

	function testLineBuilderApproximatedBezier () {
		QUnit.test("Test: Line Builder approximated bezier function", function (assert) {

			let chartletiables = [0.6000000000000014, 0.8285714285714283]
			let catMin = 1;
			let catMax = 6;
			let valMin = null;
			let valMax = null;
			let logBase = null;
			let type = 1;
			let lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			let equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			let cutPoint = 1000;
			let resultStartCatVals = [];
			let resultsStartValVals = [];
			let resultsCatVals = [1, 6];
			let resultsValVals = [1.4285714285714297, 5.571428571428571];
			let lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);

			assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals);
			assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals);
			assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals);
			assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals);

			chartletiables = [-19, 15.200000000000003]
			catMin = 1;
			catMax = 4;
			valMin = null;
			valMax = null;
			logBase = null;
			type = 1;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 1000;
			resultStartCatVals = [];
			resultsStartValVals = [];
			resultsCatVals = [1, 4];
			resultsValVals = [-3.799999999999997, 41.80000000000001];
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);

			assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals);
			assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals);
			assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals);
			assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals);

			chartletiables = [-4.199999999999999, 1.7714285714285714]
			catMin = 1;
			catMax = 6;
			valMin = null;
			valMax = null;
			logBase = null;
			type = 1;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 1000;
			resultStartCatVals = [];
			resultsStartValVals = [];
			resultsCatVals = [1, 6];
			resultsValVals = [-2.428571428571428, 6.428571428571429];
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);

			assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals);
			assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals);
			assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals);
			assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals);

			chartletiables = [-172840, 75837.85714285713]
			catMin = 1;
			catMax = 6;
			valMin = null;
			valMax = null;
			logBase = null;
			type = 1;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 1000;
			resultStartCatVals = [];
			resultsStartValVals = [];
			resultsCatVals = [1, 6];
			resultsValVals = [-97002.14285714287, 282187.1428571428];
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);

			assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals);
			assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals);
			assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals);
			assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals);

			chartletiables = [1.333333333333334, 0.28571428571428514]
			catMin = 1;
			catMax = 6;
			valMin = null;
			valMax = null;
			logBase = null;
			type = 1;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 1000;
			resultStartCatVals = [];
			resultsStartValVals = [];
			resultsCatVals = [1, 6];
			resultsValVals = [1.619047619047619, 3.047619047619045];
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);

			assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals);
			assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals);
			assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals);
			assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals);

			chartletiables = [0.6000000000000014, 0.8285714285714283]
			catMin = 1;
			catMax = 6;
			valMin = null;
			valMax = null;
			logBase = 10;
			type = 1;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			resultStartCatVals = [];
			resultsStartValVals = [];
			resultsCatVals = [1, 2.4315151945474693, 6];
			resultsValVals = [1.4285714285714297, 3.2770831944502925, 5.57142857142857];
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);

			assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals);
			assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals);
			assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals);
			assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals);

			chartletiables = [-19, 15.200000000000003]
			catMin = 1;
			catMax = 4;
			valMin = 0.1;
			valMax = null;
			logBase = 10;
			type = 1;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			resultStartCatVals = [];
			resultsStartValVals = [];
			resultsCatVals = [1.256578947368421, 1.2814964885317515, 1.2898023355861947, 4];
			resultsValVals = [0.10000000000000005, 4.414440786380464, 15.60154450534442, 41.800000000000004];
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);

			assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals);
			assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals);
			assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals);
			assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals);

			chartletiables = [-4.199999999999999, 1.7714285714285714]
			catMin = 1;
			catMax = 6;
			valMin = null;
			valMax = null;
			logBase = 10;
			type = 1;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			resultStartCatVals = [];
			resultsStartValVals = [];
			resultsCatVals = [2.376612903225806, 2.399797564974433, 2.4075257855573082, 6];
			resultsValVals = [0.01000000000000001, 0.6076398272462274, 2.3888835256910106, 6.428571428571428];
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);

			assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals);
			assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals);
			assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals);
			assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals);

			chartletiables = [-172840, 75837.85714285713]
			catMin = 1;
			catMax = 6;
			valMin = null;
			valMax = null;
			logBase = 10;
			type = 1;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			resultStartCatVals = [];
			resultsStartValVals = [];
			resultsCatVals = [2.2827937611257103, 2.3006753066997625, 2.304801817216851, 6];
			resultsValVals = [282.187142857143, 34483.62358038931, 104531.15364045568, 282187.1428571427];
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);

			assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals);
			assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals);
			assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals);
			assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals);

			chartletiables = [1.333333333333334, 0.28571428571428514]
			catMin = 1;
			catMax = 6;
			valMin = null;
			valMax = null;
			logBase = 10;
			type = 1;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			resultStartCatVals = [];
			resultsStartValVals = [];
			resultsCatVals = [1, 2.9798282656993273, 6];
			resultsValVals = [1.619047619047619, 2.2961172530284593, 3.047619047619045];
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);

			assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals);
			assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals);
			assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals);
			assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals);

			chartletiables = [1.0853780304041418, 2.202033537057911]
			catMin = 1;
			catMax = 6;
			valMin = null;
			valMax = null;
			logBase = null;
			type = 2;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			resultStartCatVals = [];
			resultsStartValVals = [];
			resultsCatVals = [1, 2.150111363073666, 6];
			resultsValVals = [1.0853780304041418, 3.6179618232437427, 5.030892471985402];
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);

			assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals);
			assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals);
			assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals);
			assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals);

			chartletiables = [-4.489845190674558, 29.565068994571178]
			catMin = 1;
			catMax = 4;
			valMin = null;
			valMax = null;
			logBase = null;
			type = 2;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			resultStartCatVals = [];
			resultsStartValVals = [];
			resultsCatVals = [1, 1.8483924814931874, 4];
			resultsValVals = [-4.489845190674558, 20.592937059146976, 36.496043242619976];
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);

			assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals);
			assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals);
			assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals);
			assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals);

			chartletiables = [-1.5298842782486233, 3.2191057898549253]
			catMin = 1;
			catMax = 6;
			valMin = null;
			valMax = null;
			logBase = null;
			type = 2;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			resultStartCatVals = [];
			resultsStartValVals = [];
			resultsCatVals = [1, 2.1501113630736657, 6];
			resultsValVals = [-1.5298842782486233, 2.1724458695997537, 4.237979003170796];
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);

			assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals);
			assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals);
			assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals);
			assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals);

			chartletiables = [-94541.7317212114, 170658.5375973549]
			catMin = 1;
			catMax = 6;
			valMin = null;
			valMax = null;
			logBase = null;
			type = 2;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			resultStartCatVals = [];
			resultsStartValVals = [];
			resultsCatVals = [1, 2.150111363073666, 6];
			resultsValVals = [-94541.7317212114, 101734.59157504095, 211237.3190234613];
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);

			assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals);
			assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals);
			assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals);
			assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals);

			chartletiables = [0.8734737381931108, 1.3313304643014572]
			catMin = 1;
			catMax = 6;
			valMin = null;
			valMax = null;
			logBase = null;
			type = 2;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			resultStartCatVals = [];
			resultsStartValVals = [];
			resultsCatVals = [1, 2.1501113630736657, 6];
			resultsValVals = [0.8734737381931108, 2.404652033192356, 3.2588977042770297];
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);

			assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals);
			assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals);
			assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals);
			assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals);

			chartletiables = [1.0853780304041418, 2.202033537057911]
			catMin = 1;
			catMax = 6;
			valMin = null;
			valMax = null;
			logBase = 10;
			type = 2;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			resultStartCatVals = [];
			resultsStartValVals = [];
			resultsCatVals = [1, 1.2988232955456442, 1.5976465910912885, 6];
			resultsValVals = [1.0853780304041418, 1.990102532537364, 3.6489665158755145, 5.0308924719854];
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);

			assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals);
			assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals);
			assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals);
			assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals);

			chartletiables = [-4.489845190674558, 29.565068994571178]
			catMin = 1;
			catMax = 4;
			valMin = null;
			valMax = null;
			logBase = 10;
			type = 2;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			resultStartCatVals = [];
			resultsStartValVals = [];
			resultsCatVals = [1.165438725217985, 1.1736988748896424, 1.174553373131538, 4];
			resultsValVals = [0.03649604324262, 11.370596442990395, 20.593748163716384, 36.49604324261996];
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);

			assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals);
			assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals);
			assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals);
			assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals);

			chartletiables = [-1.5298842782486233, 3.2191057898549253]
			catMin = 1;
			catMax = 6;
			valMin = null;
			valMax = null;
			logBase = 10;
			type = 2;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			resultStartCatVals = [];
			resultsStartValVals = [];
			resultsCatVals = [1.6134226199693829, 1.6375316351901021, 1.6409757802216334, 6];
			resultsValVals = [0.01000000000000001, 1.2276085027998023, 2.4406022912978123, 4.2379790031707945];
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);

			assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals);
			assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals);
			assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals);
			assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals);

			chartletiables = [-94541.7317212114, 170658.5375973549]
			catMin = 1;
			catMax = 6;
			valMin = null;
			valMax = null;
			logBase = 10;
			type = 2;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			resultStartCatVals = [];
			resultsStartValVals = [];
			resultsCatVals = [1.7423235984576693, 1.7547074335066466, 1.7559885198910234, 6];
			resultsValVals = [211.23731902346108, 65857.82996110985, 119286.28973286712, 211237.31902346085];
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);

			assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals);
			assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals);
			assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals);
			assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals);

			chartletiables = [0.8734737381931108, 1.3313304643014572]
			catMin = 1;
			catMax = 6;
			valMin = null;
			valMax = null;
			logBase = 10;
			type = 2;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			resultStartCatVals = [];
			resultsStartValVals = [];
			resultsCatVals = [1, 1.2933202071709262, 1.6704461878192602, 6];
			resultsValVals = [0.8734737381931108, 1.365875111651997, 2.42687128132288, 3.2588977042770293];
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);

			assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals);
			assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals);
			assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals);
			assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals);

			chartletiables = [1.3470294984018791, 0.7283261086204962]
			catMin = 1;
			catMax = 6;
			valMin = null;
			valMax = null;
			logBase = null;
			type = 5;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			resultStartCatVals = [];
			resultsStartValVals = [];
			resultsCatVals = [1, 2.6012794465851243, 6];
			resultsValVals = [1.3470294984018791, 2.918007538131848, 4.967352481769911];
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);

			assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals);
			assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals);
			assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals);
			assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals);

			chartletiables = [1.8367239858577353, 2.210556099993931]
			catMin = 1;
			catMax = 4;
			valMin = null;
			valMax = null;
			logBase = null;
			type = 5;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			resultStartCatVals = [];
			resultsStartValVals = [];
			resultsCatVals = [1, 2.5676669401272707, 4];
			resultsValVals = [1.8367239858577353, 8.201736154712346, 39.34878110454656];
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);

			assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals);
			assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals);
			assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals);
			assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals);

			chartletiables = [1.597378819226662, 6.290262865578015]
			catMin = 1;
			catMax = 6;
			valMin = null;
			valMax = null;
			logBase = null;
			type = 5;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			resultStartCatVals = [1];
			resultsStartValVals = [1.5974];
			resultsCatVals = [3.5, 4.128138791741785, 5.175036777978095, 6];
			resultsValVals = [4224.146163889106, 8992.794563642741, 16940.541896565468, 125367.1738292479];
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);

			assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals);
			assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals);
			assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals);
			assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals);

			chartletiables = [1.3470294984018791, 0.7283261086204962]
			catMin = 1;
			catMax = 6;
			valMin = null;
			valMax = null;
			logBase = 10;
			type = 5;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			resultStartCatVals = [];
			resultsStartValVals = [];
			resultsCatVals = [1, 2.1501113630736657, 6];
			resultsValVals = [1.3470294984018791, 3.112909844498046, 4.967352481769911];
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);

			assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals);
			assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals);
			assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals);
			assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals);

			chartletiables = [1.8367239858577353, 2.210556099993931]
			catMin = 1;
			catMax = 4;
			valMin = null;
			valMax = null;
			logBase = 10;
			type = 5;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			resultStartCatVals = [];
			resultsStartValVals = [];
			resultsCatVals = [1, 1.8483924814931876, 4];
			resultsValVals = [1.8367239858577353, 11.981966375832453, 39.34878110454656];
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);

			assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals);
			assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals);
			assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals);
			assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals);

			chartletiables = [1.9540401412926336, 6.056432353383194]
			catMin = 1;
			catMax = 10;
			valMin = null;
			valMax = null;
			logBase = 10;
			type = 5;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			resultStartCatVals = [];
			resultsStartValVals = [];
			resultsCatVals = [1, 1.5844104554141858, 2.558427881104495, 10];
			resultsValVals = [1.9540401412926336, 67.31219921189552, 24548.64985736736, 2225183.5179863917];
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);

			assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals);
			assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals);
			assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals);
			assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals);

			chartletiables = [1.1384149147480012, 0.2762585712743759]
			catMin = 1;
			catMax = 6;
			valMin = null;
			valMax = null;
			logBase = null;
			type = 0;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			resultStartCatVals = [];
			resultsStartValVals = [];
			resultsCatVals = [1, 4.058030426393523, 6];
			resultsValVals = [1.5006456374707577, 2.7684017513643067, 5.97263555719961];
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);

			assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals);
			assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals);
			assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals);
			assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals);

			chartletiables = [0.7999999999999979, 1.034977465516456]
			catMin = 1;
			catMax = 4;
			valMin = null;
			valMax = null;
			logBase = null;
			type = 0;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			resultStartCatVals = [];
			resultsStartValVals = [];
			resultsCatVals = [1, 1.8154710586797078, 3.1745894898125546, 4];
			resultsValVals = [2.252034239498936, 4.152738007182711, 7.3205776199890025, 50.23772863019174];
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);

			assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals);
			assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals);
			assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals);
			assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals);

			chartletiables = [0.5000000000000027, 2.302585092994045]
			catMin = 1;
			catMax = 6;
			valMin = null;
			valMax = null;
			logBase = null;
			type = 0;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			resultStartCatVals = [1];
			resultsStartValVals = [5.00007];
			resultsCatVals = [3.5, 4.925624950443996, 5.573636291554903, 6];
			resultsValVals = [1581.1388300841957, 6771.4211390038145, 9130.640370330913, 500000.00000000064];
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);

			assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals);
			assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals);
			assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals);
			assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals);

			chartletiables = [1.1384149147480012, 0.2762585712743759]
			catMin = 1;
			catMax = 6;
			valMin = null;
			valMax = null;
			logBase = 10;
			type = 0;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			resultStartCatVals = [];
			resultsStartValVals = [];
			resultsCatVals = [1, 6];
			resultsValVals = [1.5006456374707577, 5.9726355571996095];
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);

			assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals);
			assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals);
			assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals);
			assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals);

			chartletiables = [0.7999999999999979, 1.034977465516456]
			catMin = 1;
			catMax = 4;
			valMin = null;
			valMax = null;
			logBase = 10;
			type = 0;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			resultStartCatVals = [];
			resultsStartValVals = [];
			resultsCatVals = [1, 4];
			resultsValVals = [2.2520342394989354, 50.237728630191725];
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);

			assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals);
			assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals);
			assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals);
			assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals);

			chartletiables = [0.5000000000000027, 2.302585092994045]
			catMin = 1;
			catMax = 6;
			valMin = null;
			valMax = null;
			logBase = 10;
			type = 0;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			resultStartCatVals = [];
			resultsStartValVals = [];
			resultsCatVals = [1, 6];
			resultsValVals = [5.000000000000022, 499999.99999999994];
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);

			assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals);
			assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals);
			assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals);
			assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals);
		})
	}

	function testLineBuilderApproximatedBezierBoundary () {
		QUnit.test("Test: Line Builder boundaries calculation", function (assert) {

			let chartletiables = [0.6000000000000014, 0.8285714285714283]
			let catMin = 1;
			let catMax = 6;
			let valMin = null;
			let valMax = null;
			let logBase = null;
			let type = 1;
			let lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			let equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			let cutPoint = 1000; 
			let maxCatVal = 6;
			let minCatVal = 1;
			let maxValVal = 5.571428571428571;
			let minValVal = 1.4285714285714297;
			let lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);
			let boundaries = lineBuilder.getBoundary();

			assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax);
			assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin);
			assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax);
			assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin);

			chartletiables = [-19, 15.200000000000003]
			catMin = 1;
			catMax = 4;
			valMin = null;
			valMax = null;
			logBase = null;
			type = 1;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 1000;
			maxCatVal = 4;
			minCatVal = 1;
			maxValVal = 41.80000000000001;
			minValVal = -3.799999999999997;
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);
			boundaries = lineBuilder.getBoundary();

			assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax);
			assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin);
			assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax);
			assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin);

			chartletiables = [-4.199999999999999, 1.7714285714285714]
			catMin = 1;
			catMax = 6;
			valMin = null;
			valMax = null;
			logBase = null;
			type = 1;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 1000;
			maxCatVal = 6;
			minCatVal = 1;
			maxValVal = 6.428571428571429;
			minValVal = -2.428571428571428;
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);
			boundaries = lineBuilder.getBoundary();

			assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax);
			assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin);
			assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax);
			assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin);

			chartletiables = [-172840, 75837.85714285713]
			catMin = 1;
			catMax = 6;
			valMin = null;
			valMax = null;
			logBase = null;
			type = 1;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 1000;
			maxCatVal = 6;
			minCatVal = 1;
			maxValVal = 282187.1428571428;
			minValVal = -97002.14285714287;
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);
			boundaries = lineBuilder.getBoundary();

			assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax);
			assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin);
			assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax);
			assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin);

			chartletiables = [1.333333333333334, 0.28571428571428514]
			catMin = 1;
			catMax = 6;
			valMin = null;
			valMax = null;
			logBase = null;
			type = 1;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 1000;
			maxCatVal = 6;
			minCatVal = 1;
			maxValVal = 3.047619047619045;
			minValVal = 1.619047619047619;
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);
			boundaries = lineBuilder.getBoundary();

			assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax);
			assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin);
			assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax);
			assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin);

			chartletiables = [0.6000000000000014, 0.8285714285714283]
			catMin = 1;
			catMax = 6;
			valMin = null;
			valMax = null;
			logBase = 10;
			type = 1;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			maxCatVal = 6;
			minCatVal = 1;
			maxValVal = 5.57142857142857;
			minValVal = 1.4285714285714297;
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);
			boundaries = lineBuilder.getBoundary();

			assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax);
			assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin);
			assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax);
			assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin);

			chartletiables = [-19, 15.200000000000003]
			catMin = 1;
			catMax = 4;
			valMin = 0.1;
			valMax = null;
			logBase = 10;
			type = 1;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			maxCatVal = 4;
			minCatVal = 1;
			maxValVal = 41.800000000000004;
			minValVal = 0.10000000000000005;
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);
			boundaries = lineBuilder.getBoundary();

			assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax);
			assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin);
			assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax);
			assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin);

			chartletiables = [-4.199999999999999, 1.7714285714285714]
			catMin = 1;
			catMax = 6;
			valMin = null;
			valMax = null;
			logBase = 10;
			type = 1;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			maxCatVal = 6;
			minCatVal = 2.376612903225806;
			maxValVal = 6.428571428571428;
			minValVal = 0.01000000000000001;
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);
			boundaries = lineBuilder.getBoundary();

			assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax);
			assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin);
			assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax);
			assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin);

			chartletiables = [-172840, 75837.85714285713]
			catMin = 1;
			catMax = 6;
			valMin = null;
			valMax = null;
			logBase = 10;
			type = 1;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			maxCatVal = 6;
			minCatVal = 2.2827937611257103;
			maxValVal = 282187.1428571427;
			minValVal = 282.187142857143;
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);
			boundaries = lineBuilder.getBoundary();

			assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax);
			assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin);
			assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax);
			assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin);

			chartletiables = [1.333333333333334, 0.28571428571428514]
			catMin = 1;
			catMax = 6;
			valMin = null;
			valMax = null;
			logBase = 10;
			type = 1;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			maxCatVal = 6;
			minCatVal = 1;
			maxValVal = 3.047619047619045;
			minValVal = 1.619047619047619;
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);
			boundaries = lineBuilder.getBoundary();

			assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax);
			assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin);
			assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax);
			assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin);

			chartletiables = [1.0853780304041418, 2.202033537057911]
			catMin = 1;
			catMax = 6;
			valMin = null;
			valMax = null;
			logBase = null;
			type = 2;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			maxCatVal = 6;
			minCatVal = 1;
			maxValVal = 5.030892471985402;
			minValVal = 1.0853780304041418;
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);
			boundaries = lineBuilder.getBoundary();

			assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax);
			assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin);
			assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax);
			assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin);

			chartletiables = [-4.489845190674558, 29.565068994571178]
			catMin = 1;
			catMax = 4;
			valMin = null;
			valMax = null;
			logBase = null;
			type = 2;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			maxCatVal = 4;
			minCatVal = 1;
			maxValVal = 36.496043242619976;
			minValVal = -4.489845190674558;
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);
			boundaries = lineBuilder.getBoundary();

			assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax);
			assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin);
			assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax);
			assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin);

			chartletiables = [-1.5298842782486233, 3.2191057898549253]
			catMin = 1;
			catMax = 6;
			valMin = null;
			valMax = null;
			logBase = null;
			type = 2;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			maxCatVal = 6;
			minCatVal = 1;
			maxValVal = 4.237979003170796;
			minValVal = -1.5298842782486233;
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);
			boundaries = lineBuilder.getBoundary();

			assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax);
			assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly" + minCatVal + ', got:' + boundaries.catMin);
			assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax);
			assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin);

			chartletiables = [-94541.7317212114, 170658.5375973549]
			catMin = 1;
			catMax = 6;
			valMin = null;
			valMax = null;
			logBase = null;
			type = 2;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			maxCatVal = 6;
			minCatVal = 1;
			maxValVal = 211237.3190234613;
			minValVal = -94541.7317212114;
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);
			boundaries = lineBuilder.getBoundary();

			assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax);
			assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin);
			assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax);
			assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin);

			chartletiables = [0.8734737381931108, 1.3313304643014572]
			catMin = 1;
			catMax = 6;
			valMin = null;
			valMax = null;
			logBase = null;
			type = 2;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			maxCatVal = 6;
			minCatVal = 1;
			maxValVal = 3.2588977042770297;
			minValVal = 0.8734737381931108;
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);
			boundaries = lineBuilder.getBoundary();

			assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax);
			assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin);
			assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax);
			assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin);

			chartletiables = [1.0853780304041418, 2.202033537057911]
			catMin = 1;
			catMax = 6;
			valMin = null;
			valMax = null;
			logBase = 10;
			type = 2;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			maxCatVal = 6;
			minCatVal = 1;
			maxValVal = 5.0308924719854;
			minValVal = 1.0853780304041418;
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);
			boundaries = lineBuilder.getBoundary();

			assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax);
			assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin);
			assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax);
			assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin);

			chartletiables = [-4.489845190674558, 29.565068994571178]
			catMin = 1;
			catMax = 4;
			valMin = null;
			valMax = null;
			logBase = 10;
			type = 2;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			maxCatVal = 4;
			minCatVal = 1;
			maxValVal = 36.49604324261996;
			minValVal = 0.03649604324262;
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);
			boundaries = lineBuilder.getBoundary();

			assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax);
			assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin);
			assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax);
			assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin);

			chartletiables = [-1.5298842782486233, 3.2191057898549253]
			catMin = 1;
			catMax = 6;
			valMin = null;
			valMax = null;
			logBase = 10;
			type = 2;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			maxCatVal = 6;
			minCatVal = 1.6134226199693829;
			maxValVal = 4.2379790031707945;
			minValVal = 0.01000000000000001;
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);
			boundaries = lineBuilder.getBoundary();

			assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax);
			assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin);
			assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax);
			assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin);

			chartletiables = [-94541.7317212114, 170658.5375973549]
			catMin = 1;
			catMax = 6;
			valMin = null;
			valMax = null;
			logBase = 10;
			type = 2;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			maxCatVal = 6;
			minCatVal = 1.7423235984576693;
			maxValVal = 211237.31902346085;
			minValVal = 211.23731902346108;
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);
			boundaries = lineBuilder.getBoundary();

			assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax);
			assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin);
			assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax);
			assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin);

			chartletiables = [0.8734737381931108, 1.3313304643014572]
			catMin = 1;
			catMax = 6;
			valMin = null;
			valMax = null;
			logBase = 10;
			type = 2;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			maxCatVal = 6;
			minCatVal = 1;
			maxValVal = 3.2588977042770293;
			minValVal = 0.8734737381931108;
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);
			boundaries = lineBuilder.getBoundary();

			assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax);
			assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin);
			assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax);
			assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin);

			chartletiables = [1.3470294984018791, 0.7283261086204962]
			catMin = 1;
			catMax = 6;
			valMin = null;
			valMax = null;
			logBase = null;
			type = 5;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			maxCatVal = 6;
			minCatVal = 1;
			maxValVal = 4.967352481769911;
			minValVal = 1.3470294984018791;
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);
			boundaries = lineBuilder.getBoundary();

			assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax);
			assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin);
			assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax);
			assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin);

			chartletiables = [1.8367239858577353, 2.210556099993931]
			catMin = 1;
			catMax = 4;
			valMin = null;
			valMax = null;
			logBase = null;
			type = 5;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			maxCatVal = 4;
			minCatVal = 1;
			maxValVal = 39.34878110454656;
			minValVal = 1.8367239858577353;
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);
			boundaries = lineBuilder.getBoundary();

			assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax);
			assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin);
			assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax);
			assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin);

			chartletiables = [1.597378819226662, 6.290262865578015]
			catMin = 1;
			catMax = 6;
			valMin = null;
			valMax = null;
			logBase = null;
			type = 5;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			maxCatVal = 6;
			minCatVal = 1;
			maxValVal = 125367.1738292479;
			minValVal = 1.5974;
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);
			boundaries = lineBuilder.getBoundary();

			assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax);
			assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin);
			assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax);
			assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin);

			chartletiables = [1.3470294984018791, 0.7283261086204962]
			catMin = 1;
			catMax = 6;
			valMin = null;
			valMax = null;
			logBase = 10;
			type = 5;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			maxCatVal = 6;
			minCatVal = 1;
			maxValVal = 4.967352481769911;
			minValVal = 1.3470294984018791;
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);
			boundaries = lineBuilder.getBoundary();

			assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax);
			assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly" + minCatVal + ', got:' + boundaries.catMin);
			assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly" + maxValVal + ', got:' + boundaries.valMax);
			assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly" + minValVal + ', got:' + boundaries.valMin);

			chartletiables = [1.8367239858577353, 2.210556099993931]
			catMin = 1;
			catMax = 4;
			valMin = null;
			valMax = null;
			logBase = 10;
			type = 5;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			maxCatVal = 4;
			minCatVal = 1;
			maxValVal = 39.34878110454656;
			minValVal = 1.8367239858577353;
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);
			boundaries = lineBuilder.getBoundary();

			assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax);
			assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly" + minCatVal + ', got:' + boundaries.catMin);
			assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly" + maxValVal + ', got:' + boundaries.valMax);
			assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly" + minValVal + ', got:' + boundaries.valMin);

			chartletiables = [1.9540401412926336, 6.056432353383194]
			catMin = 1;
			catMax = 10;
			valMin = null;
			valMax = null;
			logBase = 10;
			type = 5;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			maxCatVal = 10;
			minCatVal = 1;
			maxValVal = 2225183.5179863917;
			minValVal = 1.9540401412926336;
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);
			boundaries = lineBuilder.getBoundary();

			assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax);
			assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin);
			assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax);
			assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin);

			chartletiables = [1.1384149147480012, 0.2762585712743759]
			catMin = 1;
			catMax = 6;
			valMin = null;
			valMax = null;
			logBase = null;
			type = 0;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			maxCatVal = 6;
			minCatVal = 1;
			maxValVal = 5.97263555719961;
			minValVal = 1.5006456374707577;
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);
			boundaries = lineBuilder.getBoundary();

			assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax);
			assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin);
			assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax);
			assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin);

			chartletiables = [0.7999999999999979, 1.034977465516456]
			catMin = 1;
			catMax = 4;
			valMin = null;
			valMax = null;
			logBase = null;
			type = 0;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			maxCatVal = 4;
			minCatVal = 1;
			maxValVal = 50.23772863019174;
			minValVal = 2.252034239498936;
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);
			boundaries = lineBuilder.getBoundary();

			assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax);
			assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin);
			assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax);
			assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin);

			chartletiables = [0.5000000000000027, 2.302585092994045]
			catMin = 1;
			catMax = 6;
			valMin = null;
			valMax = null;
			logBase = null;
			type = 0;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			maxCatVal = 6;
			minCatVal = 1;
			maxValVal = 500000.00000000064;
			minValVal = 5.00007;
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);
			boundaries = lineBuilder.getBoundary();

			assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax);
			assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin);
			assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax);
			assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin);

			chartletiables = [1.1384149147480012, 0.2762585712743759]
			catMin = 1;
			catMax = 6;
			valMin = null;
			valMax = null;
			logBase = 10;
			type = 0;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			maxCatVal = 6;
			minCatVal = 1;
			maxValVal = 5.9726355571996095;
			minValVal = 1.5006456374707577;
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);
			boundaries = lineBuilder.getBoundary();

			assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax);
			assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin);
			assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax);
			assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin);

			chartletiables = [0.7999999999999979, 1.034977465516456]
			catMin = 1;
			catMax = 4;
			valMin = null;
			valMax = null;
			logBase = 10;
			type = 0;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			maxCatVal = 4;
			minCatVal = 1;
			maxValVal = 50.237728630191725;
			minValVal = 2.2520342394989354;
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);
			boundaries = lineBuilder.getBoundary();

			assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax);
			assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin);
			assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax);
			assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin);

			chartletiables = [0.5000000000000027, 2.302585092994045]
			catMin = 1;
			catMax = 6;
			valMin = null;
			valMax = null;
			logBase = 10;
			type = 0;
			lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase);
			equationStorage = _obtainEquationStorage(type);
			lineBuilder.setCalcYVal(equationStorage.calcYVal);
			lineBuilder.setCalcXVal(equationStorage.calcXVal);
			lineBuilder.setCalcSlope(equationStorage.calcSlope);
			cutPoint = 3;
			maxCatVal = 6;
			minCatVal = 1;
			maxValVal = 499999.99999999994;
			minValVal = 5.000000000000022;
			lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint);
			boundaries = lineBuilder.getBoundary();

			assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax);
			assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin);
			assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax);
			assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin);
		})
	}

	function testHistogramHandleAggregation () {
		QUnit.test("Test: Histogram aggregation calculations", function (assert) {

			let cachedData = new AscFormat.CachedClusteredColumn();
			let axisProperties = {
				cat : {max: null, min:null, scale : []},
				val : {max: null, min:null, scale : []},
			};
			let numArr = [{val: 7}, {val: 9}];
			let strArr = [{val: "c"}, {val: "#"}];

			cachedData.data = [];
			cachedData.calculateAggregation(numArr, strArr, axisProperties);
			result = [ { lblName: 'c', val: 7 }, { lblName: '#', val: 9 } ];

			assert.ok(areSameStrings(result, cachedData.data), "Histogram; aggregation calculated incorrectly:" + result + ', got:' + cachedData.data);

			axisProperties = {
				cat : {max: null, min:null, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}];
			strArr = [{val: "c"}, {val: "#"}, {val: "f"}, {val: "c"}, {val: "c"}, {val: "c"}, {val: "c"}, {val: "f"}, {val: "f"}, {val: "d"}, {val: "f"}, {val: "d"}, {val: "d"}];

			cachedData.data = [];

			cachedData.data = [];
			cachedData.calculateAggregation(numArr, strArr, axisProperties);
			result = [
				{ lblName: 'c', val: 247 },
				{ lblName: '#', val: 9 },
				{ lblName: 'f', val: 381 },
				{ lblName: 'd', val: 451 }
			];

			assert.ok(areSameStrings(result, cachedData.data), "Histogram; aggregation calculated incorrectly:" + result + ', got:' + cachedData.data);

			axisProperties = {
				cat : {max: null, min:null, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7},];
			strArr = [];

			cachedData.data = [];
			cachedData.calculateAggregation(numArr, strArr, axisProperties);
			result = [ { lblName: '', val: 7 } ];

			assert.ok(areSameStrings(result, cachedData.data), "Histogram; aggregation calculated incorrectly:" + result + ', got:' + cachedData.data);

			axisProperties = {
				cat : {max: null, min:null, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}];
			strArr = [{val: "7"}, {val: "7"}, {val: "31"}, {val: "31"}, {val: "47"}, {val: "75"}, {val: "87"}, {val: "115"}, {val: "116"}, {val: "119"}, {val: "119"}, {val: "155"}, {val: "177"}];

			cachedData.data = [];
			cachedData.calculateAggregation(numArr, strArr, axisProperties);
			result = [
				{ lblName: '7', val: 16 },
				{ lblName: '31', val: 62 },
				{ lblName: '47', val: 47 },
				{ lblName: '75', val: 75 },
				{ lblName: '87', val: 87 },
				{ lblName: '115', val: 115 },
				{ lblName: '116', val: 116 },
				{ lblName: '119', val: 238 },
				{ lblName: '155', val: 155 },
				{ lblName: '177', val: 177 }
			];

			assert.ok(areSameStrings(result, cachedData.data), "Histogram; aggregation calculated incorrectly:" + result + ', got:' + cachedData.data);

			axisProperties = {
				cat : {max: null, min:null, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 0}, {val: 9}, {val: 31}, {val: 0}];
			strArr = [{val: "c"}, {val: "#"}, {val: "f"}, {val: "c"}];

			cachedData.data = [];
			cachedData.calculateAggregation(numArr, strArr, axisProperties);
			result = [
				{ lblName: 'c', val: 0 },
				{ lblName: '#', val: 9 },
				{ lblName: 'f', val: 31 }
			];

			assert.ok(areSameStrings(result, cachedData.data), "Histogram; aggregation calculated incorrectly:" + result + ', got:' + cachedData.data);

		})
	}

	function testHistogramHandleAggregationMinAndMax () {
		QUnit.test("Test: Histogram aggregation min and max calculations", function (assert) {

			let cachedData = new AscFormat.CachedClusteredColumn();
			let axisProperties = {
				cat : {max: null, min:null, scale : []},
				val : {max: null, min:null, scale : []},
			};
			let numArr = [{val: 7}, {val: 9}];
			let strArr = [{val: "c"}, {val: "#"}];

			cachedData.calculateAggregation(numArr, strArr, axisProperties);
			result = [7, 9];

			assert.ok(isEqual(result[0], axisProperties.val.min), "Histogram; aggregation keys calculated incorrectly:" + result[0] + ', got:' + axisProperties.val.min);
			assert.ok(isEqual(result[1], axisProperties.val.max), "Histogram; aggregation values calculated incorrectly:" + result[1] + ', got:' + axisProperties.val.max);

			axisProperties = {
				cat : {max: null, min:null, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}];
			strArr = [{val: "c"}, {val: "#"}, {val: "f"}, {val: "c"}, {val: "c"}, {val: "c"}, {val: "c"}, {val: "f"}, {val: "f"}, {val: "d"}, {val: "f"}, {val: "d"}, {val: "d"}];

			cachedData.data = [];
			cachedData.calculateAggregation(numArr, strArr, axisProperties);
			result = [7, 451];

			assert.ok(isEqual(result[0], axisProperties.val.min), "Histogram; aggregation keys calculated incorrectly:" + result[0] + ', got:' + axisProperties.val.min);
			assert.ok(isEqual(result[1], axisProperties.val.max), "Histogram; aggregation values calculated incorrectly:" + result[1] + ', got:' + axisProperties.val.max);

			axisProperties = {
				cat : {max: null, min:null, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7},];
			strArr = [];

			cachedData.data = [];
			cachedData.calculateAggregation(numArr, strArr, axisProperties);
			result = [7, 7];

			assert.ok(isEqual(result[0], axisProperties.val.min), "Histogram; aggregation keys calculated incorrectly:" + result[0] + ', got:' + axisProperties.val.min);
			assert.ok(isEqual(result[1], axisProperties.val.max), "Histogram; aggregation values calculated incorrectly:" + result[1] + ', got:' + axisProperties.val.max);

			axisProperties = {
				cat : {max: null, min:null, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}];
			strArr = [{val: "7"}, {val: "7"}, {val: "31"}, {val: "31"}, {val: "47"}, {val: "75"}, {val: "87"}, {val: "115"}, {val: "116"}, {val: "119"}, {val: "119"}, {val: "155"}, {val: "177"}];

			cachedData.data = [];
			cachedData.calculateAggregation(numArr, strArr, axisProperties);
			result = [7, 238];

			assert.ok(isEqual(result[0], axisProperties.val.min), "Histogram; aggregation keys calculated incorrectly:" + result[0] + ', got:' + axisProperties.val.min);
			assert.ok(isEqual(result[1], axisProperties.val.max), "Histogram; aggregation values calculated incorrectly:" + result[1] + ', got:' + axisProperties.val.max);

			axisProperties = {
				cat : {max: null, min:null, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 0}, {val: 9}, {val: 31}, {val: 0}];
			strArr = [{val: "c"}, {val: "#"}, {val: "f"}, {val: "c"}];

			cachedData.data = [];
			cachedData.calculateAggregation(numArr, strArr, axisProperties);
			result = [0, 31];

			assert.ok(isEqual(result[0], axisProperties.val.min), "Histogram; aggregation keys calculated incorrectly:" + result[0] + ', got:' + axisProperties.val.min);
			assert.ok(isEqual(result[1], axisProperties.val.max), "Histogram; aggregation values calculated incorrectly:" + result[1] + ', got:' + axisProperties.val.max);

		})
	}


	function testHistogramHandleBinning () {

		// this function compares each object inside the arrays
		// if there is an object different for each array
		// this function will return the index, the true object, and its incorrect prediction
		function checkArraysOfObjects (arr, predicted) {
			if (!arr || !predicted) {
				return;
			}
			if (arr.length !== predicted.length) {
				return ['arrays are different', 'arrays are different', 'arrays are different'];
			}
			for (let i = 0; i < arr.length; i++) {
				const st1 = !isEqual(arr[i].min, predicted[i].min);
				const st2 = !isEqual(arr[i].max, predicted[i].max);
				const st3 = !isEqual(arr[i].val, predicted[i].val);
				if (st1 || st2 || st3) {
					return [i, arr[i], predicted[i]];
				}
			}
			return false;
		}

		QUnit.test("Test: Histogram binning calculations", function (assert) {

			const cachedData = new AscFormat.CachedClusteredColumn();
			const binning = new AscFormat.CBinning();
			cachedData.binning = binning;

			let axisProperties = {
				cat : {max: 177, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			let numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}];

			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			console.log(cachedData);
			let result = [{min : 7, max : 89, val: 7}, {min : 89, max : 171, val: 5}, {min : 171, max : 253, val: 1}];
			let isProblematic = checkArraysOfObjects(result, cachedData.data);
			let message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);


			axisProperties = {
				cat : {max: 119, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : 7, max : 78, val: 6}, {min : 78, max : 149, val: 5}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 116, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : 7, max : 78, val: 6}, {min : 78, max : 149, val: 3}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 87, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : 7, max : 63, val: 5}, {min : 63, max : 119, val: 2}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 47, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : 7, max : 41, val: 4}, {min : 41, max : 75, val: 1}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 31, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : 7, max : 39, val: 3}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 9, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : 7, max : 10.9, val: 2}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 7, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : 7, max : 12, val: 1}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 7, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : 7, max : 12, val: 8}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 177, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = 26;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : 7, max : 33, val: 4}, {min : 33, max : 59, val: 1}, {min : 59, max : 85, val: 1}, {min : 85, max : 111, val: 1}, {min : 111, max : 137, val: 4}, {min : 137, max : 163, val: 1}, {min : 163, max : 189, val: 1}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 31, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = 5;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : 7, max : 12, val: 2}, {min : 12, max : 17, val: 0}, {min : 17, max : 22, val: 0}, {min : 22, max : 27, val: 0}, {min : 27, max : 32, val: 1}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 18, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 18}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = 10;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : 7, max : 17, val: 1}, {min : 17, max : 27, val: 1}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 177, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = null;
			binning.binCount = 1;
			binning.binSize = null;
			binning.testingNumArr = numArr;


			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : 7, max : 177, val: 13}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 9, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = null;
			binning.binCount = 3;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : 7, max : 7.666666667, val: 1}, {min : 7.666666667, max : 8.3333333333, val: 0}, {min : 8.3333333333, max : 9, val: 1}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 31, min:31, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 31}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = null;
			binning.binCount = 2;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : 31, max : 31, val: 1}, {min : 31, max : 31, val: 0}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 177, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = 7.1;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : null, max : 7.1, val: 1}, {min : 7.1, max : 89.1, val: 6}, {min : 89.1, max : 171.1, val: 5}, {min : 171.1, max : 253.1, val: 1}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 119, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = 25;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : null, max : 25, val: 2}, {min : 25, max : 96, val: 5}, {min : 96, max : 167, val: 4}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 116, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = 78;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : null, max : 78, val: 6}, {min : 78, max : 149, val: 3}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 87, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = 86.9999;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : null, max : 86.9999, val: 6}, {min : 86.9999, max : 142.9999, val: 1}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 47, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = 7;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : 7, max : 41, val: 4}, {min : 41, max : 75, val: 1}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 31, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = 30;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : null, max : 30, val: 2}, {min : 30, max : 62, val: 1}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 7.5, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 7.5}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = 7.4;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : null, max : 7.4, val: 1}, {min : 7.4, max : 8.38, val: 1}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 7, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = 6.99999;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : 7, max : 12, val: 1}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 7, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = 7;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : 7, max : 12, val: 8}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 9, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = 7.5;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : null, max : 7.5, val: 1}, {min : 7.5, max : 11.4, val: 1}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 8, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 8}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = 8;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : null, max : 8, val: 2}, {min : 8, max : 10, val: 0}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 177, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 176.99;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : 7, max : 89, val: 7}, {min : 89, max : 171, val: 5}, {min : 171, max : 176.99, val: 0}, {min : 176.99, max : null, val: 1}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 119, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 116;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : 7, max : 78, val: 6}, {min : 78, max : 116, val: 3}, {min : 116, max : null, val: 2}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 116, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 78;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : 7, max : 78, val: 6}, {min : 78, max : null, val: 3}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 87, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 7;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : 7, max : 7, val: 1}, {min : 7, max : null, val: 6}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 47, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 47;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : 7, max : 41, val: 4}, {min : 41, max : 75, val: 1}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 31, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 8;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : 7, max : 8, val: 1}, {min : 8, max : null, val: 2}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 9, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 8.9;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : 7, max : 8.9, val: 1}, {min : 8.9, max : null, val: 1}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 7, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}];

			cachedData.data = [];
			binning.intervalClosed = 7.111111;
			binning.overflow = 116;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;


			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : 7, max : 12, val: 1}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 7, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 7.111111;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : 7, max : 12, val: 8}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 8, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 8}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 8;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : 7, max : 9, val: 2}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 177, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 176.99;
			binning.underflow = 7.1;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : null, max : 7.1, val: 1}, {min : 7.1, max : 89.1, val: 6}, {min : 89.1, max : 171.1, val: 5}, {min : 171.1, max : 176.99, val: 0}, {min : 176.99, max : null, val: 1}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 119, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 116;
			binning.underflow = 25;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : null, max : 25, val: 2}, {min : 25, max : 96, val: 5}, {min : 96, max : 116, val: 2}, {min : 116, max : null, val: 2}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 116, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 78;
			binning.underflow = 78;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;


			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : null, max : 78, val: 6}, {min : 78, max : 78, val: 0}, {min : 78, max : null, val: 3}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 87, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 7;
			binning.underflow = 86.999;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : null, max : 86.999, val: 6}, {min : 86.999, max : 142.999, val: 1}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 47, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 47;
			binning.underflow = 7;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : 7, max : 41, val: 4}, {min : 41, max : 75, val: 1}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 31, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 8;
			binning.underflow = 30;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : null, max : 30, val: 2}, {min : 30, max : 62, val: 1}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 9, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 8.9;
			binning.underflow = 7.4;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : null, max : 7.4, val: 1}, {min : 7.4, max : 8.9, val: 0}, {min : 8.9, max : null, val: 1}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 7, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 6.999;
			binning.underflow = 7.1111;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : 7, max : 12, val: 1}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 7, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 7.0;
			binning.underflow = 7.1111;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : 7, max : 12, val: 8}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 177, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = 7.1;
			binning.binCount = null;
			binning.binSize = 40;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : null, max : 7.1, val: 1}, {min : 7.1, max : 47.1, val: 4}, {min : 47.1, max : 87.1, val: 2}, {min : 87.1, max : 127.1, val: 4}, {min : 127.1, max : 167.1, val: 1}, {min : 167.1, max : 207.1, val: 1}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 31, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = 20;
			binning.binCount = null;
			binning.binSize = 15;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : null, max : 20, val: 2}, {min : 20, max : 35, val: 1}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 18, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 18}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = 18;
			binning.binCount = null;
			binning.binSize = 110;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : null, max : 18, val: 2}, {min : 18, max : 128, val: 0}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 177, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = 7;
			binning.binCount = null;
			binning.binSize = 50;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : 7, max : 57, val: 5}, {min : 57, max : 107, val: 2}, {min : 107, max : 157, val: 5}, {min : 157, max : 207, val: 1}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 177, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 169.9;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = 40;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : 7, max : 47, val: 5}, {min : 47, max : 87, val: 2}, {min : 87, max : 127, val: 4}, {min : 127, max : 167, val: 1}, {min : 167, max : 169.9, val: 0}, {min : 169.9, max : null, val: 1}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 31, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 20;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = 8;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : 7, max : 15, val: 2}, {min : 15, max : 20, val: 0}, {min : 20, max : null, val: 1}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 18, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 18}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 7;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = 15;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : 7, max : 7, val: 1}, {min : 7, max : null, val: 1}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 177, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 177;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = 50;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : 7, max : 57, val: 5}, {min : 57, max : 107, val: 2}, {min : 107, max : 157, val: 5}, {min : 157, max : 207, val: 1}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 177, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 176.9;
			binning.underflow = 7.9;
			binning.binCount = null;
			binning.binSize = 70;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : null, max : 7.9, val: 1}, {min : 7.9, max : 77.9, val: 5}, {min : 77.9, max : 147.9, val: 5}, {min : 147.9, max : 176.9, val: 1}, {min : 176.9, max : null, val: 1}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 31, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 20;
			binning.underflow = 20;
			binning.binCount = null;
			binning.binSize = 10;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : null, max : 20, val: 2}, {min : 20, max : 20, val: 0}, {min : 20, max : null, val: 1}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 18, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 18}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : 7, max : 29, val: 2}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 177, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 177;
			binning.underflow = 7;
			binning.binCount = null;
			binning.binSize = 50;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : 7, max : 57, val: 5}, {min : 57, max : 107, val: 2}, {min : 107, max : 157, val: 5}, {min : 157, max : 207, val: 1}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 177, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = 7.1;
			binning.binCount = 2;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : null, max : 7.1, val: 1}, {min : 7.1, max : 177, val: 12}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 31, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = 7.1;
			binning.binCount = 1;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : null, max : 7.1, val: 1}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 18, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 18}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = 18;
			binning.binCount = 3;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : null, max : 18, val: 2}, {min : 18, max : 18, val: 0}, {min : 18, max : 18, val: 0}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 177, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 176.9;
			binning.underflow = null;
			binning.binCount = 2;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : 7, max : 176.9, val: 12}, {min : 176.9, max : null, val: 1}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 31, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 30.9;
			binning.underflow = null;
			binning.binCount = 1;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : 30.9, max : null, val: 1}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 18, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 18}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 7;
			binning.underflow = null;
			binning.binCount = 3;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : 7, max : 7, val: 1}, {min : 7, max : 7, val: 0}, {min : 7, max : null, val: 1}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 177, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 169.9;
			binning.underflow = 7.1;
			binning.binCount = 1;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : null, max : 7.1, val: 1}, {min : 169.9, max : null, val: 12}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 31, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 28;
			binning.underflow = 28;
			binning.binCount = 3;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : null, max : 28, val: 2}, {min : 28, max : 28, val: 0}, {min : 28, max : null, val: 1}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 18, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 18}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 17.5;
			binning.underflow = 8.5;
			binning.binCount = 2;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : null, max : 8.5, val: 1}, {min : 17.5, max : null, val: 1}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);

			axisProperties = {
				cat : {max: 18, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 10;
			binning.underflow = 8;
			binning.binCount = 2;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : null, max : 8, val: 1}, {min : 10, max : null, val: 2}];
			isProblematic = checkArraysOfObjects(result, cachedData.data);
			message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed';
			assert.ok(!isProblematic, message);
		})
	}

	function testHistogramHandleBinningMinAndMaxAndScale () {

		// this function compares each object inside the arrays
		// if there is an object different for each array
		// this function will return the index, the true object, and its incorrect prediction
		function checkArraysOfObjects (arr, predicted) {
			if (!arr || !predicted) {
				return;
			}
			if (arr.length !== predicted.length) {
				return ['arrays are different', 'arrays are different', 'arrays are different'];
			}
			for (let i = 0; i < arr.length; i++) {
				const st1 = !isEqual(arr[i].min, predicted[i].min);
				const st2 = !isEqual(arr[i].max, predicted[i].max);
				const st3 = !isEqual(arr[i].val, predicted[i].val);
				if (st1 || st2 || st3) {
					return [i, arr[i], predicted[i]];
				}
			}
			return false;
		}


		QUnit.test("Test: Histogram binning min and max and scale", function (assert) {

			const cachedData = new AscFormat.CachedClusteredColumn();
			const binning = new AscFormat.CBinning();
			cachedData.binning = binning;

			let axisProperties = {
				cat : {max: 177, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			let numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}];

			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			let resultMax = 7;
			let resultMin = 1;
			let resultScale = [7, 89, 171, 253];
			let test1 = axisProperties.val.max === resultMax;
			let test2 = axisProperties.val.min === resultMin;
			let test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 119, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 6;
			resultMin = 1; 
			resultScale = [7, 78, 149];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 116, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 6;
			resultMin = 1;
			resultScale = [7, 78, 149];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 87, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 5;
			resultMin = 1;
			resultScale = [7, 63, 119];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 47, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 4;
			resultMin = 1;
			resultScale = [7, 41, 75];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 31, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 3;
			resultMin = 1;
			resultScale = [7, 39];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 9, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 2;
			resultMin = 1;
			resultScale = [7, 10.9];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 7, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 1;
			resultMin = 1;
			resultScale = [7, 12];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 7, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 8;
			resultMin = 1;
			resultScale = [7, 12];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 177, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = 26;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 4;
			resultMin = 1;
			resultScale = [7, 33, 59, 85, 111, 137, 163, 189];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 31, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = 5;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 2;
			resultMin = 1;
			resultScale = [7, 12, 17, 22, 27, 32];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 18, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 18}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = 10;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 1;
			resultMin = 1;
			resultScale = [7, 17, 27];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 177, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = null;
			binning.binCount = 1;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 13;
			resultMin = 1;
			resultScale = [7, 177];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 9, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = null;
			binning.binCount = 3;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 1;
			resultMin = 1;
			resultScale = [7, 7.666666667, 8.333333333, 9];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 31, min:31, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 31}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = null;
			binning.binCount = 2;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 1;
			resultMin = 1;
			resultScale = [31, 31, 31];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 177, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = 7.1;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 6;
			resultMin = 1;
			resultScale = [7.1, 89.1, 171.1, 253.1];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 119, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = 25;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 5;
			resultMin = 1;
			resultScale = [25, 96, 167];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 116, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = 78;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 6;
			resultMin = 1;
			resultScale = [78, 149];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 87, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = 86.9999;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 6;
			resultMin = 1;
			resultScale = [86.9999, 142.9999];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 47, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = 7;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 4;
			resultMin = 1;
			resultScale = [7, 41, 75];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 31, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = 30;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 2;
			resultMin = 1;
			resultScale = [30, 62];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 7.5, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 7.5}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = 7.4;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 1;
			resultMin = 1;
			resultScale = [7.4, 8.38];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 7, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = 6.99999;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : 7, max : 12, val: 1}];
			resultMax = 1;
			resultMin = 1;
			resultScale = [7, 12];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 7, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = 7;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 8;
			resultMin = 1;
			resultScale = [7, 12];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 9, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = 7.5;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 1;
			resultMin = 1;
			resultScale = [7.5, 11.4];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 8, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 8}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = 8;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 2;
			resultMin = 1;
			resultScale = [8, 10];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 177, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 176.99;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 7;
			resultMin = 1;
			resultScale = [7, 89, 171, 176.99];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 119, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 116;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 6;
			resultMin = 1;
			resultScale = [7, 78, 116];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 116, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 78;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 6;
			resultMin = 1;
			resultScale = [7, 78];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 87, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 7;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 6;
			resultMin = 1;
			resultScale = [7, 7];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 47, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 47;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 4;
			resultMin = 1;
			resultScale = [7, 41, 75];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 31, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 8;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 2;
			resultMin = 1;
			resultScale = [7, 8];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 9, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 8.9;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 1;
			resultMin = 1;
			resultScale = [7, 8.9];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 7, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 7.111111;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 1;
			resultMin = 1;
			resultScale = [7, 12];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 7, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 7.111111;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 8;
			resultMin = 1;
			resultScale = [7, 12];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 8, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 8}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 8;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 2;
			resultMin = 1;
			resultScale = [7, 9];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 177, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 176.99;
			binning.underflow = 7.1;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 6;
			resultMin = 1;
			resultScale = [7.1, 89.1, 171.1, 176.99];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 119, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 116;
			binning.underflow = 25;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 5;
			resultMin = 1;
			resultScale = [25, 96, 116];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 116, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 78;
			binning.underflow = 78;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 6;
			resultMin = 1;
			resultScale = [78, 78];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 87, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 7;
			binning.underflow = 86.999;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 6;
			resultMin = 1;
			resultScale = [86.999, 142.999];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 47, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 47;
			binning.underflow = 7;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 4;
			resultMin = 1;
			resultScale = [7, 41, 75];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 31, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 8;
			binning.underflow = 30;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 2;
			resultMin = 1;
			resultScale = [30, 62];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 9, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 8.9;
			binning.underflow = 7.4;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 1;
			resultMin = 1;
			resultScale = [7.4, 8.9];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 7, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 6.999;
			binning.underflow = 7.1111;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 1;
			resultMin = 1;
			resultScale = [7, 12];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 7, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 7.0;
			binning.underflow = 7.1111;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 8;
			resultMin = 1;
			resultScale = [7, 12];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 177, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = 7.1;
			binning.binCount = null;
			binning.binSize = 40;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 4;
			resultMin = 1;
			resultScale = [7.1, 47.1, 87.1, 127.1, 167.1, 207.1];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 31, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = 20;
			binning.binCount = null;
			binning.binSize = 15;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 2;
			resultMin = 1;
			resultScale = [20, 35];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 18, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 18}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = 18;
			binning.binCount = null;
			binning.binSize = 110;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 2;
			resultMin = 1;
			resultScale = [18, 128];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 177, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = 7;
			binning.binCount = null;
			binning.binSize = 50;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 5;
			resultMin = 1;
			resultScale = [7, 57, 107, 157, 207];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 177, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 169.9;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = 40;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 5;
			resultMin = 1;
			resultScale = [7, 47, 87, 127, 167, 169.9];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 31, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 20;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = 8;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : 7, max : 15, val: 2}, {min : 15, max : 20, val: 0}, {min : 20, max : null, val: 1}];
			resultMax = 2;
			resultMin = 1;
			resultScale = [7, 15, 20];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 18, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 18}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 7;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = 15;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 1;
			resultMin = 1;
			resultScale = [7, 7];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 177, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 177;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = 50;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 5;
			resultMin = 1;
			resultScale = [7, 57, 107, 157, 207];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 177, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 176.9;
			binning.underflow = 7.9;
			binning.binCount = null;
			binning.binSize = 70;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 5;
			resultMin = 1;
			resultScale = [7.9, 77.9, 147.9, 176.9];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 31, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 20;
			binning.underflow = 20;
			binning.binCount = null;
			binning.binSize = 10;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 2;
			resultMin = 1;
			resultScale = [20, 20];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 18, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 18}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = null;
			binning.binCount = null;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 2;
			resultMin = 1;
			resultScale = [7, 29];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 177, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 177;
			binning.underflow = 7;
			binning.binCount = null;
			binning.binSize = 50;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 5;
			resultMin = 1;
			resultScale = [7, 57, 107, 157, 207];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 177, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = 7.1;
			binning.binCount = 2;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 12;
			resultMin = 1;
			resultScale = [7.1, 177];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 31, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = 7.1;
			binning.binCount = 1;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 1;
			resultMin = 1;
			resultScale = [7.1];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 18, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 18}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = null;
			binning.underflow = 18;
			binning.binCount = 3;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 2;
			resultMin = 1;
			resultScale = [18, 18, 18];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 177, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 176.9;
			binning.underflow = null;
			binning.binCount = 2;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 12;
			resultMin = 1;
			resultScale = [7, 176.9];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 31, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 30.9;
			binning.underflow = null;
			binning.binCount = 1;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 1;
			resultMin = 1;
			resultScale = [7];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 18, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 18}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 7;
			binning.underflow = null;
			binning.binCount = 3;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 1;
			resultMin = 1;
			resultScale = [7, 7, 7];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 177, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 169.9;
			binning.underflow = 7.1;
			binning.binCount = 1;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 12;
			resultMin = 1;
			resultScale = [7.1, 169.9];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 31, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 28;
			binning.underflow = 28;
			binning.binCount = 3;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 2;
			resultMin = 1;
			resultScale = [28, 28];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 18, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 18}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 17.5;
			binning.underflow = 8.5;
			binning.binCount = 2;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			resultMax = 1;
			resultMin = 1;
			resultScale = [8.5, 17.5];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);

			axisProperties = {
				cat : {max: 18, min:7, scale : []},
				val : {max: null, min:null, scale : []},
			};
			numArr = [{val: 7}, {val: 9}, {val: 31}];

			cachedData.data = [];
			binning.intervalClosed = 1;
			binning.overflow = 10;
			binning.underflow = 8;
			binning.binCount = 2;
			binning.binSize = null;
			binning.testingNumArr = numArr;

			cachedData.calculateBinning(numArr, axisProperties);
			result = [{min : null, max : 8, val: 1}, {min : 10, max : null, val: 2}];
			resultMax = 2;
			resultMin = 1;
			resultScale = [8, 10];
			test1 = axisProperties.val.max === resultMax;
			test2 = axisProperties.val.min === resultMin;
			test3 = areSame(axisProperties.cat.scale, resultScale);
			assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max);
			assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min);
			assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale);
		})
	}

	function testRoundValue () {
		QUnit.test("Test: RoundValues function", function (assert) {

			let chartsDrawer = new AscFormat.CChartsDrawer();
			let val = 105.965;
			let predicted = AscCommon._roundValue(val);
			result = 105.965;

			assert.ok(isEqual(result, predicted), "RoundValues calculated incorrectly:" + result + ', got:' + predicted);

			val = 105.965000000002;
			predicted = AscCommon._roundValue(val);
			result = 105.965;

			assert.ok(isEqual(result, predicted), "RoundValues calculated incorrectly:" + result + ', got:' + predicted);

			val = 105.965000000002;
			predicted = AscCommon._roundValue(val, true, 2);
			result = 106;

			assert.ok(isEqual(result, predicted), "RoundValues calculated incorrectly:" + result + ', got:' + predicted);

			val = 106.82;
			predicted = AscCommon._roundValue(val, true, 2);
			result = 107;

			assert.ok(isEqual(result, predicted), "RoundValues calculated incorrectly:" + result + ', got:' + predicted);

			val = 106.823;
			predicted = AscCommon._roundValue(val, false, 2);
			result = 106.82;

			assert.ok(isEqual(result, predicted), "RoundValues calculated incorrectly:" + result + ', got:' + predicted);

			val = 1.452369;
			predicted = AscCommon._roundValue(val, true, 1);
			result = 1.5;

			assert.ok(isEqual(result, predicted), "RoundValues calculated incorrectly:" + result + ', got:' + predicted);

			val = 10536.236958;
			predicted = AscCommon._roundValue(val, true, 1);
			result = 11000;

			assert.ok(isEqual(result, predicted), "RoundValues calculated incorrectly:" + result + ', got:' + predicted);

			val = 0.5623695865465845;
			predicted = AscCommon._roundValue(val);
			result = 0.5623695865;

			assert.ok(isEqual(result, predicted), "RoundValues calculated incorrectly:" + result + ', got:' + predicted);

			val = 15262.1262653592;
			predicted = AscCommon._roundValue(val);
			result = 15262.126256359;

			assert.ok(isEqual(result, predicted), "RoundValues calculated incorrectly:" + result + ', got:' + predicted);

			val = 15262.1262653592;
			predicted = AscCommon._roundValue(val / 0);
			result = 1;

			assert.ok(isEqual(result, predicted), "RoundValues calculated incorrectly:" + result + ', got:' + predicted);

			val = -105.965000000002;
			predicted = AscCommon._roundValue(val);
			result = -105.965;

			assert.ok(isEqual(result, predicted), "RoundValues calculated incorrectly:" + result + ', got:' + predicted);

			val = -105.965000000002;
			predicted = AscCommon._roundValue(val, true, 2);
			result = -106;

			assert.ok(isEqual(result, predicted), "RoundValues calculated incorrectly:" + result + ', got:' + predicted);

			val = -106.82;
			predicted = AscCommon._roundValue(val, true, 2);
			result = -107;

			assert.ok(isEqual(result, predicted), "RoundValues calculated incorrectly:" + result + ', got:' + predicted);

		})
	}

	QUnit.module("ChartsDraw");

	function startTests() {
		QUnit.start();

		testChartBaseTypes();
		testLinearTrendLineEquation();
		testLogarithmicTrendLineEquation();
		testPowerTrendLineEquation();
		testExponentialTrendLineEquation();
		testPolynomialTrendLineEquation();
		testMovingAverageTrendLineResuts();
		testDispR()
		testIntercept();
		testLineBuilderApproximatedBezier();
		testLineBuilderApproximatedBezierBoundary();
		testHistogramHandleAggregation();
		testHistogramHandleAggregationMinAndMax();
		testHistogramHandleBinning();
		testHistogramHandleBinningMinAndMaxAndScale();
		testRoundValue();
	}
});
